13结构型模式之桥接模式
概念
Bridge 模式又叫做橋接模式,是構造型的設計模式之一。Bridge模式基于類的最小設計原則,通過使用封裝,聚合以及繼承等行為來讓不同的類承擔不同的責任。它的主要特點是把抽象(abstraction)與行為實現(implementation)分離開來,從而可以保持各部分的獨立性以及應對它們的功能擴展。
?
角色和職責
Client
??? Bridge模式的使用者
Abstraction
??? 抽象類接口(接口或抽象類)維護對行為實現(Implementor)的引用
Refined Abstraction
??? Abstraction子類
Implementor
??? 行為實現類接口 (Abstraction接口定義了基于Implementor接口的更高層次的操作)
ConcreteImplementor
Implementor子類
?
?適用于:
橋接模式(Bridge?Pattern)是將抽象部分與實現部分分離(解耦合),使它們都可以獨立的變化。
???????? 車 安裝 發動機 ;不同型號的車,安裝不同型號的發動機
???????? 圖形 填 顏色 ???不同形狀的圖形,填充上 不同的顏色
將“車 安裝 發動機”這個抽象 和 實現進行分離;兩個名字 就設計兩個類;
將“圖形 填 顏色”這個抽象 和 實現 進行分離,兩個名字,就設計兩個類
?
?
案例
//不同的車型,不同型號,安裝不同類型的發動機
#include <iostream> using namespace std;class MyCar1 { public:virtual void installEngine() = 0; };class BMW5 : public MyCar1 { public:virtual void installEngine(){cout << "BMW5 3500CC" << endl;} };class BMW6 : public MyCar1 { public:virtual void installEngine(){cout << "BMW6 4000CC" << endl;} };class Jeep11 : public MyCar1 { public:virtual void installEngine(){cout << "Jeep11 1100CC" << endl;} };class Jeep12 : public MyCar1 { public:virtual void installEngine(){cout << "Jeep12 1200CC" << endl;} };//不同的車型,不同型號,安裝不同類型的發動機,會引起子類的泛濫 //問題引出 void main1601() {Jeep12 *j12 = new Jeep12;j12->installEngine();delete j12;return ; }class MyCar2 {public:virtual void installEngine3500() = 0;virtual void installEngine4000() = 0;virtual void installEngine1100() = 0;virtual void installEngine1200() = 0; };class BMW : public MyCar2 { public:virtual void installEngine3500(){cout << "3500CC" << endl;}virtual void installEngine4000(){cout << "4000CC" << endl;}virtual void installEngine1100() {cout << "1100CC" << endl;}virtual void installEngine1200(){cout << "1200CC" << endl;} };//這樣的設計 不符合開閉原則 void main1602() {BMW *bmw5 = new BMW;bmw5->installEngine3500(); }//需要把“安裝發動機”這個事,做很好的分解;把抽象 和 行為實現 分開 //發動機是一個名次,專門抽象成一個類;類中含有一個成員函數,安裝發動機class Engine { public:virtual void installEngine() = 0; };class Engine4000 : public Engine { public:virtual void installEngine(){cout << "安裝發動機 Engine4000" << endl;} };class Engine3500 : public Engine { public:virtual void installEngine(){cout << "安裝發動機 Engine 3500" << endl;} };class Car { public:Car(Engine *pengine){m_engine = pengine;}virtual void installEngine() = 0;protected:Engine *m_engine; };class BMW7 :public Car { public:BMW7(Engine *p) : Car(p){}//注意車的安裝 和 發動機的安裝 不同之處virtual void installEngine(){cout << "BMW7 " ; m_engine->installEngine();} protected: private: };void main163() {Engine4000 *e4000 = new Engine4000;BMW7 *bmw7 = new BMW7(e4000);bmw7->installEngine();delete bmw7;delete e4000; } void main() {//main1601();//main1602();main163();system("pause"); }
?
轉載于:https://www.cnblogs.com/gd-luojialin/p/10357987.html
總結
以上是生活随笔為你收集整理的13结构型模式之桥接模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英雄联盟不是说EZ的W的被动也会对自己有
- 下一篇: 烟雨江湖怎么躺棺材?