当前位置: 首页 > news >正文

绵阳市建设工程监督网站/网络推广关键词优化公司

绵阳市建设工程监督网站,网络推广关键词优化公司,武夷山景区网站建设优点,店铺设计装修桥接(Brige)模式与伪码推导 1.基本概念 1.1 动机 由于某些类型的固有的实现逻辑,使它们具有两个变化的维度,乃至多个维度的变化。如何应对这种“多维度的变化”?如何利用面向对象技术是的类型可以轻松的沿着两个乃至…

桥接(Brige)模式与伪码推导

1.基本概念

1.1 动机

  • 由于某些类型的固有的实现逻辑,使它们具有两个变化的维度,乃至多个维度的变化。
  • 如何应对这种“多维度的变化”?如何利用面向对象技术是的类型可以轻松的沿着两个乃至多个方向变化、而不引入额外的复杂度?

将**抽象部分(业务功能)实现部分(平台实现)**分离,使它们都可以独立的变化。

1.2 结构

在这里插入图片描述

1.3 要点

  • 桥接模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。所谓抽象和实现沿着各自维度的变化,即“子类化”它们。
  • 桥接模式有时候类似于多继承方案,但是多继承方案往往违背单一职责原则(即一个类只有一个变化的原因),复用性较差。桥接模式是比多继承方案更好的解决方法。
  • 桥接模式的应用一般在“两个非常强的变化维度”,有时一个类也有多余两个的变化维度,这时可以使用桥接模式的拓展模式。

2.伪码推导

  • 原始代码
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();
}
  • 代码推导

基类为class Messager,方法可分为两部分,一部分为与业务逻辑相关的“Login、SendMessage、SendPicture”,另一部分与平台实现相关的“PlaySound、DrawShape、WriteText、Connect”:

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(){}
};

为了平台实现,分别实现PCMessagerBase、MobileMessagerBase。

//平台实现
class PCMessagerBase : public Messager{//...
};class MobileMessagerBase : public Messager{//...
};

对于不同的业务逻辑,再去调用平台实现的代码:

//业务抽象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();//........}
};

按照这种方法编写代码,最终实现的类个数:1(基类)+n(平台实现)+m*n(业务逻辑x平台实现)。

分析代码可知,对于最终的类实现,平台实现是相对固定的(即平台开发完成后不会修改、只会交给业务逻辑进行调用,替换的话也是整个平台进行替换),另一部分为业务逻辑,即根据需求实现对平台的调用。

即可把原有的class Messager拆分为两部分,一部分为平台相关实现,另一部分为业务接口。只在最终创建的时候将平台相关的资源添加进去(即运行时装配),最终实现类的个数为:1(基类)+n(平台实现)+m(业务种类):

修改后的基类实现为:

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 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(){}
};//平台实现 n
class 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);
}
http://www.jmfq.cn/news/5332645.html

相关文章:

  • 惠州网站建设公司/baidu 百度一下
  • 易企秀 旗下 网站建设/广州网站建设工作室
  • 财经直播网站建设/网站排名前十
  • 花卉网站建设规划书/网站案例分析
  • 企业电子商务网站建设策划书/福州短视频seo
  • 网站建设 嘉定/百度站长收录
  • 福建建设职业管理中心网站/广州seo外包
  • 建设学校网站需要具备/seo搜索铺文章
  • 学习网站建设需要什么/苏州seo怎么做
  • 虹口广州网站建设/百度趋势搜索
  • 杭州网站建设代理商/流量平台有哪些
  • 易经网站建设应用/关键词如何确定
  • 衡州网站建设seo/常见的网站推广方式
  • 建设项目竣工验收网站/百度官方推广
  • 商城类网站建设数据库/短视频seo
  • 深圳北站网站建设/steam交易链接在哪里
  • 上海宝山网站建设培训/百度电脑版入口
  • 春哥技术团队网站建设/谷歌浏览器下载手机版安卓官网
  • 网站建设可视化工具/免费网络推广平台
  • 延安市城乡建设局网站/今日广东头条新闻
  • 枣庄网站建设哪家公司好/爱站网seo
  • 高校二级学院网站建设管理制度/目前引流最好的app
  • 安徽网站建设公司排名/google官网入口
  • 小蚁人网站建设/关键词排名优化工具
  • 网站建设技术外文/百度站长平台电脑版
  • 网站建设什么是开发实施实施/网站权重查询工具
  • 学校网站建设招标方案/网站策划书的撰写流程
  • 莱芜建设网站/网站优化软件哪个好
  • 深圳最专业的高端网站建设/百度知道一下首页
  • 面包店网站建设论文/百度信息流广告平台