《大话设计模式》读书笔记之C++实现--chapter22桥接模式
来源:互联网 发布:淘宝美食店铺吐血推荐 编辑:程序博客网 时间:2024/06/01 12:28
桥接模式的核心在于理解好继承属于is-a的关系,当我们使用继承的时候先要在心里问自己一遍子类是不是一个父类,如果答案是否,那我们就要考虑如何重新定义父类实现更好的抽象,此时我们可以联想到合成/聚合关系,合成代表的是一种强的拥有关系,也就是B是A的一部分,比如大雁的翅膀是大雁的一部分。聚合代表的是一种弱的拥有关系,也就是A的对象可以包含B,但B不是A的一部分,比如一只大雁可以是一个雁群,但一个雁群可以有多只大雁。文中用手机软件和手机品牌的例子形象地解释了这种关系,无论我们是使用手机品牌或者手机软件作为抽象类,其子类都会变地十分庞大,当需要修改时也要修改多处,但我们通过聚合/合成的关系重新设计,将手机品牌设为抽象类,其中包含手机软件的抽象类,然后将两者设计为聚合关系,即手机品牌中包含手机软件,手机软件不是手机品牌的一部分,即使没有手机软件,也不会影响手机品牌。然后我们的抽象手机品牌就可以派生出不同的手机品牌,同样,手机软件也可以派生出不同的手机软件,当需要时就可以将不同的手机软件功能加入到不同的手机品牌中。C++的表示代码如下:
#include <iostream>using namespace std;class AbstractPhoneSoftware{public: virtual void RunSoftware() = 0; virtual ~AbstractPhoneSoftware(){}};class Game:public AbstractPhoneSoftware{public: void RunSoftware() { cout << "Game Run" << endl; }};class Book:public AbstractPhoneSoftware{public: void RunSoftware() { cout << "Book Run" <<endl; }};class AbstractPhoneBrand{public: virtual void run() = 0; virtual void SetSoftware(AbstractPhoneSoftware *software) = 0;protected: AbstractPhoneSoftware* m_pSoftware;};class Nokia:public AbstractPhoneBrand{public: void SetSoftware(AbstractPhoneSoftware *software) { m_pSoftware = software; } void run() { m_pSoftware->RunSoftware(); }};class iPhone:public AbstractPhoneBrand{public: void SetSoftware(AbstractPhoneSoftware *software) { m_pSoftware = software; } void run() { m_pSoftware->RunSoftware(); }};int main(int argc,char** argv){ Nokia nokia; iPhone iphone; AbstractPhoneSoftware *game = new Game(); AbstractPhoneSoftware *book = new Book(); nokia.SetSoftware(game); iphone.SetSoftware(book); nokia.run(); iphone.run(); delete game; game = nullptr; delete book; book = nullptr; return 0;}
阅读全文
0 0
- 《大话设计模式》读书笔记之C++实现--chapter22桥接模式
- 大话设计模式读书笔记之桥接模式
- 《大话设计模式》读书笔记之C++实现--chapter7代理模式
- 《大话设计模式》读书笔记之C++实现--chapter23命令模式
- 《大话设计模式》读书笔记之C++实现--chapter24命令模式
- 大话设计模式读书笔记之策略模式
- 大话设计模式读书笔记之策略模式
- 大话设计模式读书笔记之原型模式
- 大话设计模式读书笔记之外观模式
- 大话设计模式读书笔记之观察者模式
- 大话设计模式读书笔记之状态模式
- 大话设计模式读书笔记之适配器模式
- 大话设计模式读书笔记之备忘录模式
- 大话设计模式读书笔记之组合模式
- 大话设计模式读书笔记之迭代器模式
- 大话设计模式读书笔记之命令模式
- 大话设计模式读书笔记之访问者模式
- 《大话设计模式》java实现之桥接模式
- 回车事件
- HDU4670-Cube number on a tree
- hdu 2639 (Bone Collector II) 0-1背包的第k优解
- NOIP 2002 均分纸牌
- Filter过滤器
- 《大话设计模式》读书笔记之C++实现--chapter22桥接模式
- Gym 101389. B
- 关于Switch控件的使用
- Saltstack安装LAMP
- codeforces 870C. Maximum splitting
- [NOIP2017模拟]玩积木
- 学习uboot前奏之hardware-IRQ[s3c2440]
- 流程控制语句
- Learning Python Part III 之 模块