国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

《Head First 設(shè)計(jì)模式》例子的C++實(shí)現(xiàn)(適配器模式)

2019-11-06 07:57:45
字體:
供稿:網(wǎng)友

適配器模式比較簡單。就是一種輔助類用一個(gè)類來模擬另一個(gè)類。C++ 中沒有 interface 這個(gè)概念,全部用純虛類來代替。適配器模式的難點(diǎn)在于如何用一種 interface 去模擬另一種 interface,但是這個(gè)問題更多的是算法層面的,與設(shè)計(jì)模式關(guān)系不大。

下面是代碼:

/// duck.h#ifndef DUCK_H#define DUCK_H#include <iostream>class Duck{public: virtual void quack() = 0; virtual void fly() = 0;};class MallardDuck : public Duck{public: void quack() override { std::cout << "Quack" << std::endl; } void fly() override { std::cout << "I'm flying" << std::endl; }};#endif // DUCK_H///turkey.h#ifndef TURKEY_H#define TURKEY_H#include <iostream>class Turkey{public: virtual void gobble() = 0; virtual void fly() = 0;};class WildTurkey : public Turkey{public: void gobble() override { std::cout << "Gobble gobble" << std::endl; } void fly() override { std::cout << "I'm flying a short distance" << std::endl; }};#endif // TURKEY_H///DuckAdapter.h#ifndef DUCKADAPTER_H#define DUCKADAPTER_H#include "duck.h"#include "turkey.h"class DuckAdapter : public Turkey{public: DuckAdapter(Duck * duck); void gobble() override; void fly() override;PRivate: Duck* m_duck;};#endif // DUCKADAPTER_H///DuckAdapter.cpp#include "duckadapter.h"#include <stdlib.h>DuckAdapter::DuckAdapter(Duck *duck){ m_duck = duck;}void DuckAdapter::gobble(){ m_duck->quack();}void DuckAdapter::fly(){ if(rand() % 5 == 0) { m_duck->fly(); }}///TurkeyAdapter.h#ifndef TURKEYADAPTER_H#define TURKEYADAPTER_H#include "turkey.h"#include "duck.h"class TurkeyAdapter : public Duck{public: TurkeyAdapter(Turkey *turkey); void quack() override; void fly() override;private: Turkey* m_turkey;};#endif // TURKEYADAPTER_H///TurkeyAdapter.cpp#include "turkeyadapter.h"TurkeyAdapter::TurkeyAdapter(Turkey *turkey){ m_turkey = turkey;}void TurkeyAdapter::quack(){ m_turkey->gobble();}void TurkeyAdapter::fly(){ for(int i=0; i < 5; i++) { m_turkey->fly(); }}

最后是測似代碼:

#include <iostream>#include "duck.h"#include "turkey.h"#include "duckadapter.h"#include "turkeyadapter.h"using namespace std;void testDuck(Duck &duck){ duck.quack(); duck.fly();}int main(int argc, char *argv[]){ MallardDuck* duck = new MallardDuck(); WildTurkey* turkey = new WildTurkey(); Duck* turkeyAdapter = new TurkeyAdapter(turkey); cout << "The Turkey says..." << endl; turkey->gobble(); turkey->fly(); cout << "/nThe Duck says..." << endl; testDuck(*duck); cout << "/nThe TurkeyAdapter says..." << endl; testDuck(*turkeyAdapter); Turkey *duckAdapter = new DuckAdapter(duck); for(int i=0;i<10;i++) { cout << "The DuckAdapter says..." << endl; duckAdapter->gobble(); duckAdapter->fly(); } return 0;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 临夏县| 七台河市| 伊吾县| 阿拉善左旗| 固安县| 阿拉尔市| 文化| 紫金县| 行唐县| 韩城市| 贺兰县| 亚东县| 兴业县| 咸丰县| 呼伦贝尔市| 伊春市| 雷州市| 珠海市| 塔河县| 夏津县| 昌都县| 葫芦岛市| 若羌县| 平湖市| 海淀区| 资溪县| 汉寿县| 嫩江县| 富锦市| 平谷区| 凤翔县| 高雄县| 南部县| 鹤壁市| 宁夏| 阆中市| 新源县| 水城县| 道孚县| 城固县| 株洲县|