设计模式——桥模式(bridge)

Decorator,Bridge属于单一职责模式。

motivation:某些类型的固有实现逻辑,是的他们又多个维度的变化;需要使得类型在者多个维度上(如实现平台和实现的版本)进行灵活变化,而不带来额外的复杂度。

key interface or class:

        1.接口类,如Messager;

        2.接口实现类,如MessagerImp,用于被接口中函数调用以实现接口功能。

feature:一个接口类,和接口实现imp类。

structure:

template codes:

//重构前
//接口类
class Messager{
public:
    virtual void Login()=0;
    virtual void sendMessage()=0;
    virtual void sendPicture()=0;

    virtual void playSound()=0;
    virtual void drawShape()=0;
    virtual void writeContext()=0;
    virtual void connect()=0;

    virtual ~Messager(){
    }
};

//不同平台不同实现方法
class PCMessagerBase: public Messager{
public:
    virtual void playSound(){
    //实现PC平台的playSound方法
    }
    virtual void drawShape(){
    //实现PC平台的drawShape方法
    }
    virtual void writeContext(){
    //实现PC平台的writeContext方法
    }
    virtual void connect(){
    //实现PC平台的connect方法
    }
};
class MobileMessagerBase: public Messager{
public:
    virtual void playSound(){
    //实现Mobile平台的playSound方法
    }
    virtual void drawShape(){
    //实现Mobile平台的drawShape方法
    }
    virtual void writeContext(){
    //实现Mobile平台的writeContext方法
    }
    virtual void connect(){
    //实现Mobile平台的connect方法
    }
};

//业务层面实现接口(已经对继承进行过组合重构之后,类似decorator)
class MessagerLite{
Messager* messager; //可以为PCMessagerBase,MobileMessagerBase
public:
    MessagerLite(Messager* msg):messager(msg){}
    virtual void Login(){
    //实现对应平台的Lite版本Login方法
    messager->connect(); //调用Base中方法
    //...
    }
    virtual void sendMessage(){
    //实现对应平台的Lite版本sendMessage方法    
    messager->writeContext();  //调用Base中方法
    //...
    }
    virtual void sendPicture(){
    //实现对应平台的Lite版本sendPicture方法    
    messager->drawShape();  //调用Base中方法
    //...
    }
};

class MessagerPerfect{
Messager* messager; //可以为PCMessagerBase,MobileMessagerBase
public:
    MessagerPerfect(Messager* msg):messager(msg){}
    virtual void Login(){
    //实现对应平台的Perfect版本Login方法
    //...
    messager->connect(); //调用Base中方法
    //...
    }
    virtual void sendMessage(){
    //实现对应平台的Perfect版本sendMessage方法
    //...    
    messager->writeContext();  //调用Base中方法
    //...
    }
    virtual void sendPicture(){
    //实现对应平台的Perfect版本sendPicture方法 
    //...   
    messager->drawShape();  //调用Base中方法
    //...
    }
};

//调用时
process(){

Messager* msg = new PCMessagerBase();
MessagerPerfect* pcMsg= new MessagerPerfect(msg);

}


//采用bridge模式重构之后
class Messager{
protect:
MessagerImp* messagerImp; //可以为PCMessagerBase,MobileMessagerBase
public:
    virtual void Login()=0;
    virtual void sendMessage()=0;
    virtual void sendPicture()=0;

    virtual ~Messager(){
    }
};
class MessagerImp{
public:
    virtual void playSound()=0;
    virtual void drawShape()=0;
    virtual void writeContext()=0;
    virtual void connect()=0;

    virtual ~MessagerImp(){
    }
};

//不同平台不同实现方法
class PCMessagerBase: public MessagerImp{
public:
    virtual void playSound(){
    //实现PC平台的playSound方法
    }
    virtual void drawShape(){
    //实现PC平台的drawShape方法
    }
    virtual void writeContext(){
    //实现PC平台的writeContext方法
    }
    virtual void connect(){
    //实现PC平台的connect方法
    }
};
class MobileMessagerBase: public MessagerImp{
public:
    virtual void playSound(){
    //实现Mobile平台的playSound方法
    }
    virtual void drawShape(){
    //实现Mobile平台的drawShape方法
    }
    virtual void writeContext(){
    //实现Mobile平台的writeContext方法
    }
    virtual void connect(){
    //实现Mobile平台的connect方法
    }
};

//业务层面实现接口 
class MessagerLite: public Messager{
public:
    MessagerLite(Messager* msg):messager(msg){}
    virtual void Login(){
    //实现对应平台的Lite版本Login方法
    messagerImp->connect(); //调用Base中方法
    //...
    }
    virtual void sendMessage(){
    //实现对应平台的Lite版本sendMessage方法    
    messagerImp->writeContext();  //调用Base中方法
    //...
    }
    virtual void sendPicture(){
    //实现对应平台的Lite版本sendPicture方法    
    messagerImp->drawShape();  //调用Base中方法
    //...
    }
};

class MessagerPerfect{
public:
    MessagerPerfect(Messager* msg):messager(msg){}
    virtual void Login(){
    //实现对应平台的Perfect版本Login方法
    //...
    messagerImp->connect(); //调用Base中方法
    //...
    }
    virtual void sendMessage(){
    //实现对应平台的Perfect版本sendMessage方法
    //...    
    messagerImp->writeContext();  //调用Base中方法
    //...
    }
    virtual void sendPicture(){
    //实现对应平台的Perfect版本sendPicture方法 
    //...   
    messagerImp->drawShape();  //调用Base中方法
    //...
    }
};

//调用时
process(){

MessagerImp* msgImp = new PCMessagerBase(); //PC平台的实现
Messager* pcMsg= new MessagerPerfect(msgImp); //Perfect版本的方法

}

summary:

1. bridge使用“对象间的组合关系”来解耦抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度去变化;

2.bridge模式vs多继承,多继承违背单一职责原则(一个类已有一个变化维度),复用性不高;

3.bridge模式多用于”两个非常强的变化维度“,有多个变化维度时可以使用birdge模式的扩展。

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值