设计模式之桥模式学习笔记


前言

一、什么是桥(bridge)模式?

桥(Bridge)模式是用于把抽象化(通常是抽象类)与实现(接口)解耦,使得二者可以独立变化。

这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

二、C++伪代码实例

1.示意图与场景举例说明

假设当前需要实现提供统一的文件系统接口给用户这个要求,使用桥接模式实现的示意图如下
假设当前需要实现提供统一的文件系统接口给用户这个要求,示意图如下

2.C++伪代码实现

场景描述:
客户使用的是抽象类FileApi,客户不管在任何平台下,使用的都是抽象类提供的统一接口,不关心具体实现,一套客户代码,多个平台可用(抽象和具体实现解耦(示意图绿框部分与红框部分))。

C++伪代码如下(示例):

//FileSystem,即实现的抽象基类
class FileSystem{
public:
  //给子类具体类实现的接口
  virtual void * file_open(void * arg) = 0;
  virtual void * file_write(void * arg) = 0;
  //后面省略......................
};

//FileSystem具体实现之Linux
class LinuxFileSystem:public FileSystem{
public:
  virtual void * file_open(void * arg) {
     count << "Linux open" << endl;
  };
  virtual void * file_write(void * arg){
  	 count << "Linux write" << endl;
  };
  //后面省略......................
};

//FileSystem具体实现之Windows
class WindowsFileSystem:public FileSystem{
public:
  virtual void * file_open(void * arg) {
     count << "Windows open" << endl;
  };
  virtual void * file_write(void * arg){
  	 count << "Windows write" << endl;
  };
  //后面省略......................
};

//提供给客户的抽象层
class FileApi{
private:
  FileSystem* os_fs;
  
public:
  /*两种或以上的构造函数*/
  FileApi(void){
      //自动判断客户当前的系统类型,下面假设当前是Linux
      //伪代码如下:
      //Linux = get_sys_type();
      //this->os_fs = new LinuxFileSystem();
  };
  FileApi(sys_type){
      //或让客户传入配置类型,假设传入Windows系统
      this->os_fs = new WindowsFileSystem();
  };
  
  /*该类都是虚函数,客户有特殊需要也能继承该类重写或新增接口,无需求时可直接使用该类接口*/
  virtual int get_sys_type(){//该接口可用于获取系统类型
  	  return sys_type;
  };
  virtual void * open(void * arg){
      this->os_fs ->file_open(arg);//调用具体系统的实现
  };
   virtual void * write(void * arg){
      this->os_fs ->file_write(arg);//调用具体系统的实现
  };
};

3.客户使用代码

示例代码如下:

int main() {
    //让类自行判断,假设当前是Linux系统
    FileApi * linux_api = New  FileApi();
    linux_api->open("abc.txt",.......);
    linux_api->write(.......);
	return 0;
}

总结

优点: 1、分离接口及其实现部分。 2、优秀的扩展能力。 3、可以隐藏实现细节 4.减少类的数量

缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值