日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

13结构型模式之桥接模式

發布時間:2023/11/30 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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结构型模式之桥接模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。