赞
踩
桥接模式(Bridge):将抽象部分(Abstraction)与它的实现部分(Implementation)分离,使它们都可以独立地变化。
什么叫抽象与它的实现分离,这并不是说,让抽象类与其派生类分离,因为这样没有任何意义。实现指的是抽象类和它的派生类用来实现自己的对象。
手机品牌和手机软件的关系
手机品牌包含手机软件,但是软件并不是品牌的一部分,所以他们之间是聚合关系。
#include <iostream> using namespace std; class HandsetSoft { public: virtual void run() = 0; }; class HandsetGame :public HandsetSoft { public: void run() { cout << "运行手机游戏" << endl; } }; class HandsetAddressList :public HandsetSoft { public: void run() { cout << "运行手机通讯录" << endl; } }; class HandsetBrand { protected: HandsetSoft* soft = nullptr; public: void setHandsetSoft(HandsetSoft* soft) { this->soft = soft; } virtual void run() = 0; }; class HandsetBrandN :public HandsetBrand { public: void run() { soft->run(); } }; class HandsetBrandM :public HandsetBrand { public: void run() { soft->run(); } }; int main() { HandsetBrand* hb = new HandsetBrandM(); hb->setHandsetSoft(new HandsetGame()); hb->run(); hb->setHandsetSoft(new HandsetAddressList()); hb->run(); delete hb; return 0; }
电器与开关
#include <iostream> using namespace std; #define SAFE_DELETE(p) {if(p){delete p; p = nullptr;}} class IEquipment { public: virtual ~IEquipment(){} virtual void PowerOn() = 0; virtual void PowerOff() = 0; }; class Light :public IEquipment { public: void PowerOn() { cout << "开灯" << endl; } void PowerOff() { cout << "关灯" << endl; } }; class Fan :public IEquipment { public: void PowerOn() { cout << "打开风扇" << endl; } void PowerOff() { cout << "关闭风扇" << endl; } }; class ISwitch { protected: IEquipment* m_pEquipment = nullptr; public: ISwitch(IEquipment* equipment) { m_pEquipment = equipment; } virtual ~ISwitch(){} virtual void On() = 0; virtual void Off() = 0; }; class PullChainSwitch :public ISwitch { public: PullChainSwitch(IEquipment* equipment):ISwitch(equipment){} //用拉链式开关打开电器 void On() { cout << "用拉链式开关打开电器" << endl; if (m_pEquipment != nullptr) { m_pEquipment->PowerOn(); } } //用拉链式开关关闭电器 void Off() { cout << "用拉链式开关关闭电器" << endl; if (m_pEquipment != nullptr) { m_pEquipment->PowerOff(); } } }; class TwoPositionSwitch :public ISwitch { public: TwoPositionSwitch(IEquipment* equipment) :ISwitch(equipment) {} //用两位开关打开电器 void On() { cout << "用两位开关打开电器" << endl; if (m_pEquipment != nullptr) { m_pEquipment->PowerOn(); } } //用两位开关关闭电器 void Off() { cout << "用两位开关关闭电器" << endl; if (m_pEquipment != nullptr) { m_pEquipment->PowerOff(); } } }; int main() { IEquipment* light = new Light(); IEquipment* fan = new Fan(); ISwitch* pullChain = new PullChainSwitch(light); ISwitch* twoPosition = new TwoPositionSwitch(fan); pullChain->On(); pullChain->Off(); twoPosition->On(); twoPosition->Off(); SAFE_DELETE(twoPosition); SAFE_DELETE(pullChain); SAFE_DELETE(fan); SAFE_DELETE(light); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。