Modem Adapter模式與Bridge模式

2021-06-25 23:01:17 字數 2096 閱讀 8626

本例取自《敏捷軟體開發》第25章,使用c++實現

1.背景

modem類有四個介面,dial、handup、send、receive,客戶使用modem,有三種實際的modem與之對應

**

#ifndef modem_h_

#define modem_h_

#include #include using namespace std;

class modem

virtual void dial()=0;

virtual void hangup()=0;

virtual void send()=0;

virtual void receive()=0;

};class hayesmodem: public modem

virtual void dial()=0;

virtual void hangup()=0;

};class modem

virtual void send()=0;

virtual void receive()=0;

};class hayesmodem: public modem, public dialler

virtual void dial()=0;

virtual void hangup()=0;

virtual void send()=0;

virtual void receive()=0;

};class hayesmodem: public modem

執行結果:

fake dial!

dedicatedmodem send!

dedicatedmodem receive!

fake hangup!

dedicatedmodem send!

dedicatedmodem receive!

4.使用bridge模式來解決

在建模的時候,可以將modem作為乙個抽象的類,然後派生出dialmodem和dedicatedmodem,然後這兩個類分別可以有多個品牌的modem來實現,但是這樣的話,對於這種自由度不是很穩定(會擴充套件、會變化)的場景,用不了多久,就會派生出大量的類。

bridge就是將這些自由度(也可以做為變化方向)先進行打散,分為dial、hangup、send、receive四個自由度,每個自由度單獨由乙個impler實現,impler又通過介面委託給真實的modem廠家來實現。然後modemconnectioncontroller又將這些變化方向「橋接」起來,組合成乙個整體

**

class modem

virtual void dial()=0;

virtual void hangup()=0;

virtual void send()=0;

virtual void receive()=0;

};class dedicatedmodem

virtual void send()=0;

virtual void receive()=0;

};class modemimplementation

virtual void dial()=0;

virtual void hangup()=0;

virtual void send()=0;

virtual void receive()=0;

};class hayesmodem: public modemimplementation

實現結果:

hayesmodem dial!

hayesmodem send!

hayesmodem receive!

hayesmodem hangup!

usroboticsmodem send!

usroboticsmodem receive!

5.總結

使用adapter模式的解決方案是簡單和直接的。它讓所有的依賴關係都指向正確的方向,並且實現起來非常簡單。bridge模式稍稍有些複雜,建議開始時不要使用bridge模式,知道你明顯可以看出需要完全分離出連線策略和通訊策略並且需要增加新的連線策略時,才使用這種方法。

java與模式 裝飾模式

第四個設計模式 裝飾模式 裝飾模式是對物件功能增強時,平時使用繼承的一種替代方案 一 uml示意圖 二 組成部分 1.抽象構件 原始的功能介面 2.具體構件 具體的原始功能類 3.裝飾角色 持有具體構件類的物件,以便執行原有功能 4.具體裝飾 具體擴充套件的功能在這裡 三 例子 使用裝飾模式來演示乙...

使用者模式與核心模式

首先了解一下使用者模式和核心模式。一般說來,程序既可在使用者模式下執行,又可在核心模式下執行。核心模式的許可權高於使用者模式的許可權。程序每次呼叫乙個系統呼叫時,程序的執行方式都發生變化 從使用者模式切換到核心模式,然後繼續執行。可見 乙個程序在cpu上執行可以有兩種執行模式 程序狀態 使用者模式和...

模式與非模式窗體

窗體分為模式的和非模式的,只有模式和非模式兩種,簡單點說,當你以模式方式開啟乙個視窗,你只能在將其關閉以後才能操作另外的視窗.但非模式視窗顯示時,你可以同時操作這兩個視窗.模式的 使使用者只能使用當前窗體,只有當前窗體關閉後其他窗體才可用 可以這樣理解,如果你把某個窗體設為模式窗體,那麼你要想對其它...