设计模式(六)bridge
来源:互联网 发布:淘宝980ti能买吗 编辑:程序博客网 时间:2024/06/05 17:11
1.使用场景:某些类具有两个或多个变化的维度(平台),且不同维度中有大量重复的静态特质代码
2.理论依据:多态、虚函数
3.定义:将抽象部分(业务功能)与实现部分(平台实现)分离,使得他们都可以独立地变化
4.步骤:将原基类,拆分为两个或多个不同的基类,新的基类通过组合实现它们之间的关系,通过对新基类,进行类似decorator设计模式的操作,完成对不同维度责任的划分
5.技法:继承->组合
编译时装配->运行时装配(多态)
6.变化:原基类根据不同维度(平台)拆分,通过多态实现运行时调用的功能
不变:不能再改变的基类
对比decorator:
相同点:对于A类要调用B类的功能,并且A类的成员函数的实现,都是直接或间接通过调用B类的成员函数,此时
使用组合的设计方式
不同点:bridge还需根据不同的平台对基类进行拆分,组合使用是在拆分的基类中完成的
而decorator并不需要拆分
原代码:
class Messager{public: virtual void Login(string username, string password)=0; virtual void SendMessage(string message)=0; virtual void SendPicture(Image image)=0; virtual void PlaySound()=0; virtual void DrawShape()=0; virtual void WriteText()=0; virtual void Connect()=0; virtual ~Messager(){}};//平台实现class PCMessagerBase : public Messager{public: virtual void PlaySound(){ //********** } virtual void DrawShape(){ //********** } virtual void WriteText(){ //********** } virtual void Connect(){ //********** }};class MobileMessagerBase : public Messager{public: virtual void PlaySound(){ //========== } virtual void DrawShape(){ //========== } virtual void WriteText(){ //========== } virtual void Connect(){ //========== }};//业务抽象class PCMessagerLite : public PCMessagerBase {public: virtual void Login(string username, string password){ PCMessagerBase::Connect(); //........ } virtual void SendMessage(string message){ PCMessagerBase::WriteText(); //........ } virtual void SendPicture(Image image){ PCMessagerBase::DrawShape(); //........ }};class PCMessagerPerfect : public PCMessagerBase {public: virtual void Login(string username, string password){ PCMessagerBase::PlaySound(); //******** PCMessagerBase::Connect(); //........ } virtual void SendMessage(string message){ PCMessagerBase::PlaySound(); //******** PCMessagerBase::WriteText(); //........ } virtual void SendPicture(Image image){ PCMessagerBase::PlaySound(); //******** PCMessagerBase::DrawShape(); //........ }};class MobileMessagerLite : public MobileMessagerBase {public: virtual void Login(string username, string password){ MobileMessagerBase::Connect(); //........ } virtual void SendMessage(string message){ MobileMessagerBase::WriteText(); //........ } virtual void SendPicture(Image image){ MobileMessagerBase::DrawShape(); //........ }};class MobileMessagerPerfect : public MobileMessagerBase {public: virtual void Login(string username, string password){ MobileMessagerBase::PlaySound(); //******** MobileMessagerBase::Connect(); //........ } virtual void SendMessage(string message){ MobileMessagerBase::PlaySound(); //******** MobileMessagerBase::WriteText(); //........ } virtual void SendPicture(Image image){ MobileMessagerBase::PlaySound(); //******** MobileMessagerBase::DrawShape(); //........ }};void Process(){ //编译时装配 Messager *m = new MobileMessagerPerfect();}
使用bridge设计模式:
class Messager{protected: MessagerImp* messagerImp;//...public: virtual void Login(string username, string password)=0; virtual void SendMessage(string message)=0; virtual void SendPicture(Image image)=0; virtual ~Messager(){}};class MessagerImp{public: virtual void PlaySound()=0; virtual void DrawShape()=0; virtual void WriteText()=0; virtual void Connect()=0; virtual MessagerImp(){}};//平台实现 nclass PCMessagerImp : public MessagerImp{public: virtual void PlaySound(){ //********** } virtual void DrawShape(){ //********** } virtual void WriteText(){ //********** } virtual void Connect(){ //********** }};class MobileMessagerImp : public MessagerImp{public: virtual void PlaySound(){ //========== } virtual void DrawShape(){ //========== } virtual void WriteText(){ //========== } virtual void Connect(){ //========== }};//业务抽象 m//类的数目:1+n+mclass MessagerLite :public Messager { public: virtual void Login(string username, string password){ messagerImp->Connect(); //........ } virtual void SendMessage(string message){ messagerImp->WriteText(); //........ } virtual void SendPicture(Image image){ messagerImp->DrawShape(); //........ }};class MessagerPerfect :public Messager { public: virtual void Login(string username, string password){ messagerImp->PlaySound(); //******** messagerImp->Connect(); //........ } virtual void SendMessage(string message){ messagerImp->PlaySound(); //******** messagerImp->WriteText(); //........ } virtual void SendPicture(Image image){ messagerImp->PlaySound(); //******** messagerImp->DrawShape(); //........ }};void Process(){ //运行时装配 MessagerImp* mImp=new PCMessagerImp(); Messager *m =new Messager(mImp);}
阅读全文
0 0
- 设计模式(六)bridge
- 设计模式(c++)笔记之六(Bridge模式)
- 设计模式之六 ------Bridge(桥接)
- 23种设计模式之六(结构型模式)Bridge模式
- 设计模式(六)桥连模式Bridge(结构型)
- 设计模式(六)桥连模式Bridge(结构型)
- 设计模式(六)桥连模式Bridge(结构型)
- 设计模式(六)桥连模式Bridge(结构型)
- 设计模式(六)桥连模式Bridge(结构型)
- (Boolan)C++设计模式 <六> ——桥模式(Bridge)
- 浅谈设计模式之六——Bridge模式
- (7)设计模式:bridge
- 设计模式之bridge模式(1)
- 设计模式之Bridge模式(3)
- java 设计模式--桥梁模式(Bridge)
- 设计模式之Bridge(桥模式)
- 设计模式--桥接(Bridge)模式
- 设计模式之Bridge模式(笔记)
- maven web 工程生成war包
- 数组-leetcode 561 Array Partition I
- LitePal通过adb shell查看表中字段命令
- idea 工具热布署方案汇总
- Java环境变量配置
- 设计模式(六)bridge
- HTTP中GET请求和POST请求的区别
- http线程并发测试-化无为有的漏洞挖掘 jmter
- python脚本输入密码判断
- paypal在线支付演示下载PHP版
- python基础和数据类型(01,02)
- 高效率读取大文件进行数据处理-通过扩展RandomAccessFile类使之具备Buffer改善I/O性能
- 三种常见字符编码简介:ASCII、Unicode和UTF-8
- angular1.x的directive