Bridge(橋接)模式
案例:某公司的產品有智慧儀表和智慧閘道器,可供選擇的處理器有AM3352、S3C2440和tiny4412,智慧儀表可以選擇這3種處理器之一,同樣智慧閘道器也可以。
最簡單的實現方式:
class SmartGateway : public Product
{
public:
void product_soc()
{
std::cout << "Smart Gateway Soc: AM3352" << std::endl;
}
};
class SmartMeter : public Product
{
public :
void product_soc()
{
std::cout << "Smart Meter Soc: S3C2440" << std::endl;
}
};
顯然,如果要新增處理器為非AM3352的SmartGateway,就需要再定義子類。隨著組合的增多,子類也會增加,這不是一種好的設計思路。
不同的產品搭載的Soc,可以對產品進行抽象,產品的實現部分與抽象部分進行解耦合,使它們可以獨立變化,中間再“橋接”起來,這便是橋接模式:
+------------+ 橋接 +--------------- -----------+
| 變化的產品 |========== | 變化的實現(構成行為不同) |
+------------+ +--------------------------+
引入橋接模式後,上述案例的UML圖可為:
(1)產品抽象類:維護對實現部分的引用
(2)產品抽象類的子類:使用基類維護的實現部分的引用使自己可以生成對物件
(3)行為抽象類:定義行為的介面
(4)行為抽象類的子類:行為的介面的實現
class Soc //行為抽象類
{
public:
virtual void install_soc () = 0;
};
class AM3352 : public Soc //行為的具體實現,產品構成時需呼叫本類
{
public:
void install_soc() { std::cout << "Soc: AM3352!\n"; }
};
class S3C2440 : public Soc
{
public:
void install_soc() { std::cout << "Soc: S3C2440!\n"; }
};
class Tiny4412 : public Soc
{
public:
void install_soc() { std::cout << "Soc: Tiny4412!\n"; }
};
class Product //產品的抽象類
{
public:
Product(Soc *s) : m_Soc(s) {}
virtual void install_soc() = 0;
protected:
Soc *m_Soc;
};
//產品的具體實現類,需要呼叫行為類的相關函式以構成具體物件
class SmartGateway : public Product
{
public:
SmartGateway(Soc *s) : Product(s) {}
void install_soc()
{
std::cout << "Smart Gateway: " << std::endl;
m_Soc->install_soc();
}
};
class SmartMeter : public Product
{
public:
SmartMeter(Soc *s) : Product(s) {}
void install_soc()
{
std::cout << "Smart Meter: " << std::endl;
m_Soc->install_soc();
}
};
int main(void)
{
Soc* soc = new AM3352; //行為類
Product *p = new SmartGateway(soc); //將行為類傳給產品類以組合成具體產品
p->install_soc();
delete p;
delete soc;
return 0;
}
編譯執行:
相關推薦
Bridge橋接模式(結構型模式)
現有一個需求,一個遊戲系統需要構建不同風格的房屋,暫不考慮其他設計模式,需要能實現在PC端、移動端....等等多個平臺的構建.最簡單的實現方式如下: /// <summary> /// 房屋抽象 /// </summary&
Bridge(橋接)模式
案例:某公司的產品有智慧儀表和智慧閘道器,可供選擇的處理器有AM3352、S3C2440和tiny4412,智慧儀表可以選擇這3種處理器之一,同樣智慧閘道器也可以。 最簡單的實現方式:
bridge橋接模式
#include <iostream> #include <string> using namespace std; class abstraction_imp { public: virtual ~abstraction_imp(){}
設計模式之十八:橋接模式(Bridge)
ora 它的 pla sin string src ams down ng- 橋接模式: 將抽象部分和它的實現部分相分離開來,以使它們能夠單獨地變化。 UML圖: 主要包含: Abstraction:定義了抽象部分的接口。操作一個實現部分對
設計模式之橋接模式 Bridge
sed lap println 模式 generated this blog opened es2017 代碼實現 public interface Brand { void sale(); } class Lenovo implemen
C#設計模式之八橋接模式(Bridge)【結構型】
升級 方向 implement 詳細 .cn mage names 這樣的 意圖 一、引言 今天我們要講【結構型】設計模式的第二個模式,該模式是【橋接模式】,也有叫【橋模式】的。大家第一次看到這個名稱會想到什麽呢?我第一次看到這個模式根據名稱猜肯定是連接什麽東西的。因為
設計模式之橋接模式(Bridge)
out ima img 例子 視圖 存在 關系 第一條 用法 橋接模式屬於先天模式,這裏的先天模式就是說一開始就要把結構搭建好,方便後來的擴展,而不是對已經出現的模塊和接口進行改進擴展的。橋接的核心在於實體類和操作類之間的聚合關系,這個聚合關系就是我們所說的"橋",不同於
橋接模式-Bridge(Java實現)
技術分享 world java實現 () open() count end ring idg 橋接模式-Bridge 橋梁模式的用意是"將抽象化(Abstraction)與實現化(Implementation)脫耦, 將"類的功能層次結構" 與 "類的實現層次結構"分離為
14橋接模式Bridge
oid 汽車 action idg ret 是把 承擔 mage efi 一、什麽是橋接模式 Bridge 模式又叫做橋接模式,是構造型的設 計模式之一。Bridge模式基於類的最小設計原則,通過 使用封裝,聚合以及繼承等行為來讓不同的類承擔不同 的責任。它的主要特點
【設計模式】橋接模式 Bridge Pattern
模式 融合 毛筆 lda 工具 開頭 dmi 復雜度 希望 開篇還是引用呂振宇老師的那篇經典的文章《設計模式隨筆-蠟筆與毛筆的故事》。這個真是太經典了,沒有比這個例子能更好的闡明橋接模式了,這裏我就直接盜來用了。 現在市面上賣的蠟筆很多,各種型號,各種顏色種類繁多, 假
C#設計模式系列:橋接模式(Bridge)
span -i 原來 派生 引用 分享圖片 on() 版本 nta 1.1定義 當一個抽象可能有多個實現時,通常用繼承來進行協調。抽象類定義對該抽象的接口,而具體的子類則用不同的方式加以實現。繼承機制將抽象部分與它的實現部分固定在一起,使得難以對抽象部分和實現部分獨立地進行
重走Java設計模式——橋接模式(Bridge Pattern)
橋接模式 定義 將抽象部分與實現部分分離,使它們都可以獨立的變化。 結構詳解 橋接模式主要包含如下幾個角色: 1.Abstraction:抽象類; 2.RefinedAbstraction:擴充抽象類; 3.Implementor:實現類介面; 4.Co
設計模式之橋接模式(Bridge Pattern)
設計模式之橋接模式(Bridge Pattern) 備註:只是瞭解了大概,在實際應用中還沒有 1.用處 將抽象部分與實現部分分離,使它們都可以獨立的變化。 2. 分類 結構型模式 3. UML 4. 程式碼 測試類Test public class Test { publ
設計模式-橋接模式(Bridge)
概述 定義 : 將抽象部分與它的具體實現部分分離, 使它們都可以獨立的變化 通過組合的方式建立兩個類之間的聯絡, 而不是繼承 型別 : 結構型 適用場景 抽象和具體實現之間增加更多的靈活性 一個類存在兩個或多個獨立變化的維度, 且這兩個
設計模式-橋接模式(Bridge)
橋接模式是構造型模式之一。把抽象(Abstraction)與行為實現(Implementor)分離開來,從而可以保持各部分的獨立性以及應對它們的功能擴充套件。 角色和職責: 1.抽象類(Abstraction)-Car: 維護對行為實現(Implementor)的引用 2.具
橋接模式(Bridge)
1.簡述 橋接模式即將抽象部分與它的實現部分分離開來,使他們都可以獨立變化。橋接模式將繼承關係轉化成關聯關係,它降低了類與類之間的耦合度,減少了系統中類的數量,也減少了程式碼量。將抽象部分與他的實現部分分離這句話不是很好理解,其實這並不是將抽象類與他的派生類分離,而是抽象類
JAVA設計模式(07):結構型-橋接模式(Bridge)
在正式介紹橋接模式之前,我先跟大家談談兩種常見文具的區別,它們是毛筆和蠟筆。假如我們需要大中小3種型號的畫筆,能夠繪製12種不同的顏色,如果使用蠟筆,需要準備3×12 = 36支,但如果使用毛筆的話,只需要提供3種型號的毛筆,外加12個顏料盒即可,涉及到的物
javascript中設計模式之橋接模式詳解(Bridge design)
一、橋接模式 1、橋接模式是一種既能把倆個物件連線在一起,又能避免二者間的強耦合的方法。通過“橋”把彼此聯絡起來,同時又允許他們各自獨立變化 2、橋接模式主要作用就是將抽象與其實現隔離開來,以便二者獨
路由WDS 中繼模式Repeater和橋接模式Bridge的區別,同時WDS對網速的影響
首先必須明確什麼叫降速?在這裡說的中繼橋接降不降速是指與無線網絡卡直接連線作比較的。如果中繼橋接的訊號太遠、質量差,網速肯定下降。 理論上說,只要網路訊號質量、強度足夠好,WDS、Repeater、BRIDGE、WISP等中繼模式都不會造成降半速。自己刷韌體的,由於與硬體不完全吻合,降速是正常的,特別是D
橋接模式(Bridge Pattern)——處理多維度變化
前言 P: 嘿,小重樓!我們這邊有個簡單的需求,交個你了。 me: 啥需求?我拒絕!!! P: 呀?你小子敢拒絕老孃的需求,活膩了吧? me: 好吧,我接。。。做啥呢?我接。。。 P: 我這邊需要開發一個視訊播放器。不僅要跨平臺(Linux,Mac,W