国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表

圖片精選

主站蜘蛛池模板: 凤山市| 宽甸| 扶绥县| 双鸭山市| 当雄县| 民勤县| 诸暨市| 大洼县| 吴堡县| 巴南区| 伊川县| 定襄县| 蒙城县| 油尖旺区| 安西县| 塘沽区| 遂溪县| 曲阳县| 博爱县| 灵山县| 荣成市| 翁牛特旗| 梁河县| 石屏县| 永新县| 壤塘县| 怀宁县| 炎陵县| 高碑店市| 梁河县| 陈巴尔虎旗| 瑞丽市| 和静县| 柳林县| 武安市| 行唐县| 项城市| 齐河县| 上饶县| 韶关市| 微博|