桥接模式(bridge)c++版
来源:互联网 发布:英克软件售后 编辑:程序博客网 时间:2024/06/14 08:46
这是大话设计模式中桥接模式的c++版本
/* * bridge.cpp * * Created on: Oct 13, 2017 * Author: clh01s@163.com * 桥接模式:将抽象部分与它的实现部分分离, * 使它们都可以独立的变化。 * 实现指的是抽象类和他的派生类用来实现自己的对象。 * */#include <iostream>using namespace std;class HandsetSoft{public: virtual ~HandsetSoft(){} virtual void Run()=0;};//手机游戏class HandsetGame:public HandsetSoft{public: //实现run函数 void Run() override { cout<<"运行手机游戏。"<<endl; }};class HandsetAddressList:public HandsetSoft{public: //实现run函数 void Run() override { cout<<"运行手机通讯录。"<<endl; }};//手机品牌class HandsetBrand{public: virtual ~HandsetBrand(){} //设置手机软件 void SetHandsetSoft(HandsetSoft* soft){soft_ = soft;} virtual void Run()=0;protected: HandsetSoft* soft_;};//手机品牌Nclass HandsetBrandN:public HandsetBrand{public: //运行软件 void Run() override { cout<<"N手机运行软件"<<endl; HandsetBrand::soft_->Run(); }};//手机品牌Mclass HandsetBrandM:public HandsetBrand{public: //运行软件 void Run() override { cout<<"M手机运行软件"<<endl; HandsetBrand::soft_->Run(); }};int main(){//实例化手机品牌N HandsetBrandN abn; abn.SetHandsetSoft(new HandsetGame()); abn.Run(); abn.SetHandsetSoft(new HandsetAddressList()); abn.Run();//实例化手机品牌M HandsetBrandM abm; abm.SetHandsetSoft(new HandsetGame()); abm.Run(); abm.SetHandsetSoft(new HandsetAddressList()); abm.Run(); return 0;}
运行结果:
clh@clh:~/testcode/设计模式$ ./a.out N手机运行软件运行手机游戏。N手机运行软件运行手机通讯录。M手机运行软件运行手机游戏。M手机运行软件运行手机通讯录。
以下内容摘抄自《设计模式》
桥接模式的动机:
当一个抽象可能有多个实现时,通常用继承来协调它们。抽象类定义对该抽象的接口,而具体的子类则用不同的方式加以实现。但是此方法有时不够灵活。继承机制将抽象部分与它的实现部分固定在一起,使得难以对抽象部分和实现部分独立的进行修改、扩充和重用。
桥接模式的使用情况:
1.你希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为,在程序运行时刻实现部分应该可以被选择或者切换。
2.类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。
3.对一个抽象的实现部分的修改应对客户不产生影响,即客户代码不必重新编译。
4.(c++)你相对客户完全隐藏抽象的实现部分。在C++中,类的表示在类的接口中是可见的。
5.如果你需要生成许多相同功能的类(比如不同系统中的相同的功能的类)。这样一种情况说明你必须将一个对象分解成连个部分。
6.你想在多个对象间共享实现(可能使用引用计数)。但同时要求客户并不知道这一点。
桥接模式的优点:
1.分离接口以及实现部分 一个实现未必不变的绑定在一个接口上。抽象类的实现可以在运行时刻进行配置,一个对象甚至可以在运行时刻改变他的实现。而且改变一个实现类的时候客户不必要重新进行编译。
另外接口与实现的分离有助于分层,从而产生更好的结构化系统,系统高层仅需要知道abstraction和implementor即可。
2.提高可扩充性 可以独立的扩充abstraction和implementor。
3.实现细节对用户透明 你可以对用户隐藏细节,例如共享implementor对象以及相应的引用计数机制(如果有的话)
转载请注明原地址:http://blog.csdn.net/clh01s
- 桥接模式(bridge)c++版
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- Bridge(桥接模式)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- Bridge(桥接模式)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- 桥接模式(Bridge)
- spring 注解之@interface
- hashmap and hashtable 区别
- C++笔记——函数模板
- HTML总结
- 汇编语言的七种寻址方式
- 桥接模式(bridge)c++版
- 2017.10.10 第一天总结
- vue、angular、react前端三大框架的区别
- oracle学习总结(三)
- uniVocity-parsers:速度最快功能最全的CSV开发库
- Comparable 与 Comparator
- 笔试_oracle(5)
- Mysql 慢查询参数
- ubuntu下安装配置python3