C++ 设计模式(可复用面向对象软件的基础)学习笔记——第七讲 bridge模式(桥模式)

对于设计模式初学者来说,GoF的这本设计模式(可复用面向对象软件的基础)是有些难理解的,因此我先看了视频教程,附上教程链接网址https://www.bilibili.com/video/av52251106/?p=7。

       以下是我的学习笔记整理,分享给有需要的朋友,记录的比较简单,如有不理解的地方可以看原教程视频链接,或者留言给我,本小菜和你一起探讨。

一、动机

1.由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个维度的变化。

2.如何应对这种“多维度的变化”?如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂度?

 

二、代码实例:

 

class MessagerImp{

public:

        virtual void PlaySound()    =0;

        virtual void DrawShape()   =0;

        virtual void WriteText()      =0;

        virtual void Connect()        =0;

 

        virtual ~MessagerImp(){}    

};

 

class Messager{

MessagerImp* messagerImp;//new ...

public:

        Messager(MessagerImp* mImp):messagerImp(mImp){

        }

        virtual void Login(string username, string password)=0;

        virtual void SendMessage(string message)=0;

        virtual void SendPicture(Image image)=0;

 

        virtual ~Messager(){}

};

 

//平台实现 n

class PCMessagerBase: public MessagerImp{

public:

        virtual void PlaySound(){

                //************

        }

        virtual void DrawShape(){

                //************

        }

        virtual void WriteText(){

                //************

        }

        virtual void Connect(){

                //************

        }

};

 

class MobileMessagerBase: public MessagerImp{

public:

        virtual void PlaySound(){

                //=========

        }

        virtual void DrawShape(){

                //=========

        }

        virtual void  WriteText(){

                //=========

        }

        virtual void Connect(){

                //=========

        }    

};

    

class MessagerLite: public Messager{

public:

        //调用父类构造函数

        MessagerLite(MessagerImp* mImp):Messager(mImp){

        }

        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:

        //调用父类构造函数

        MessagerPerfect(MessagerImp* mImp):Messager(mImp){

        }

        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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值