1. 程式人生 > >Bridge(橋接)模式

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