C++设计模式之桥接模式

桥接模式:将抽象部分与现实部分分离,使它们都可以独立变换。

以下情形考虑使用桥接模式:

1.当一个对象有多个变化因素的时候,考虑依赖于抽象的实现,而不是具体的实现。

2.当多个变化因素在多个对象间共享时,考虑将这部分变化的部分抽象出来再聚合/合成进来。

3.当一个对象的多个变化因素可以动态变化的时候。

优点:

将实现抽离出来,再实现抽象,使得对象的具体实现依赖于抽象,满足了依赖倒转原则。

更好的可扩展性。

可动态的切换实现。桥接模式实现了抽象和实现的分离,在实现桥接模式时,就可以实现动态的选择具体的实现。

/*
	关键代码:将现实独立出来,抽象类依赖现实类。
	以下示例中,将各类App、各类手机独立开来,实现各种App和各种手机的*桥接。
*/
#include <iostream>

using namespace std;

//抽象App类,提供接口
class App {
  public:
  	virtual ~App(){cout << "~App()" << endl;}
  	virtual void run() = 0;
};

//具体的App实现类
class GameApp:public App {
  public:
  void run() {
     cout << "GameApp Running" << endl;
  }
};

//具体的App实现类
class TranslateApp:public App {
  public:
  	void run() {
      cout << "TranslateApp Running" << endl;
    }
};

//抽象手机类,提供接口
class MobilePhone {
  public:
  	virtual ~MobilePhone(){ cout << "~MobilePhone()" << endl;}
  	virtual void appRun(App *app) = 0;  // 实现App与手机的桥接
};

//具体的手机类实现
class HuaWei:public MobilePhone {
  public:
  	void appRun(App *app) {
      cout << "HuaWei" <<endl;
      app->run();
    }
}

int main() {
  App *gameApp = new GameApp;
  App *translateApp = new TranslateApp;
  MobilePhone *mi = new XiaoMi;
  MobilePhone *hua = new HuaWei;
  
  mi->appRun(gameApp);
  mi->appRun(translateApp);
 	hua->appRun(gameApp);
  hua->appRun(translateApp;
  
   delete hua;
   hua = nullptr;
   delete mi;
}






上一篇:linux之elasticsearch环境安装与配置


下一篇:列表,元组和字典