C 實現 設計模式 14 門面模式

2021-09-24 04:08:10 字數 3006 閱讀 4952

門面模式的注意事項

*參考書籍* :

大家都寫過紙質信件吧 , 寫信大致分為四個步驟 : 先寫信件的內容 , 然後寫信封 , 再把信放到信封中 , 投遞到信箱中進行郵遞 . 如圖所示 :

**實現也非常的簡單 :

#include

#include

//#include

using namespace std;

//門面模式

//寫信過程介面

class iletterprocess

;//寫信過程的實現

class letterprocessimpl : public iletterprocess

//在信封上填寫必要的資訊

void

fillenvelope

(string address)

//把信放到信封中 , 並封好

void

letterinotoenvelope()

//塞到郵箱中 , 郵遞

void

sendletter()

};//場景1

intmain()

執行結果 :

我們回頭來看看這個過程 ,它與高內聚的要求相差甚遠 , 更不要說迪公尺特法則 , 介面隔離原則 .你要知道者4個步驟 , 而且還要知道他們的順序 ,一旦出錯 , 信就不可能郵寄出去 , 這在物件導向的程式設計中是極度的不合適 , 它根本沒有完成乙個類所具有的單一職責 .

還有 ,如果信件多了就非常麻煩 , 每封信都要這樣運轉一遍 , 非得累死, 更別說要發個廣告信了 , 那怎麼辦? 還好,現在郵局開發了乙個新業務 , 你只要把信件的必要資訊告訴我 , 我給你發 , 我來完成這4個過程 , 只要把信件交給我就成了 , 其他的不要管 .

那麼就增加乙個modenpostoffice 類 , 負責對乙個比較複雜的信件處理過程的封裝 , 然後高層模組只要和它有互動就成了 .

//現代化郵局

class modenpostoffice

~modenpostoffice()

//寫信 , 封裝 , 投遞 ,一體化

void

sendletter

(string context , string address)

private:

iletterprocess* letterprocess ;

};

這個類是什麼意思呢 , 就是說現在有乙個hell road potoffice(地獄路郵局)提供了一種新型服務 , 客戶只要把信的內容以及收信位址給他們 , 他們就會把信寫好 , 封好 , 並傳送出去 .這種服務推出後大受歡迎 , 這多簡單 , 客戶減少了很多任務作 .

完成**如下 :

#include

#include

//#include

using namespace std;

//門面模式

#if 0

//寫信過程介面

class iletterprocess

;//寫信過程的實現

class letterprocessimpl : public iletterprocess

//在信封上填寫必要的資訊

void

fillenvelope

(string address)

//把信放到信封中 , 並封好

void

letterinotoenvelope()

//塞到郵箱中 , 郵遞

void

sendletter()

};//現代化郵局

class modenpostoffice

~modenpostoffice()

//寫信 , 封裝 , 投遞 ,一體化

void

sendletter

(string context , string address)

private:

iletterprocess* letterprocess ;};

//場景2

intmain()

#endif

執行結果 :

定義 :門面模式也叫做外觀模式 . 要求乙個子系統的外部和其內部的通訊必須通過乙個統一的物件進行 . 門面模式提供乙個高層的介面 , 是的子系統易於所使用 .

擴充套件後的系統類圖 :

門面模式的優點

門面模式的缺點

門面模式最大的缺點就是不符合開閉原則,對修改關閉,對擴充套件開放,看看我們那個門面物件吧,它可是重中之重,一旦在系統投產後發現有乙個小錯誤,你怎麼解決?完全遵從開閉原則,根本沒辦法解決。繼承?覆寫?都頂不上用,唯一能做的一件事就是修改門面角色的**,這個風險相當大,這就需要大家在設計的時候慎之又慎,多思考幾遍才會有好收穫 .

門面模式的是使用場景乙個子系統可以有多個門面

一般情況下,乙個子系統只要有乙個門面足夠了,在什麼情況下乙個子系統有多個門面呢?

以下列舉了幾個 .

門面不參與子系統內的業務邏輯《設計模式之禪 第二版》

《設計模式》

設計模式筆記14 門面模式

在主件構建過程中,某些介面之間的依賴常常會帶來很多問題 甚至根本無法實現。採用新增一層間接 穩定 介面,來隔離本來互相緊密關聯的介面是一種常見的解決方案。典型模式 為子系統中的一組介面提供乙個一致 穩定 的介面,fa ade模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用 復用 設計模式 ...

設計模式 05 門面模式

目錄 什麼是門面模式 為什麼要用門面模式 門面模式組成 需要注意的幾點 門面模式如其名稱所述,是內部功能對外的使用者介面。就如同門面一樣,將自身內在的複雜功能實現隱藏,而對外暴露簡單的使用者介面。在專案裡當乙個系統要去完成乙個功能時,很多情況下都需要其多個子系統服務聯合才能完成。而對應外界的呼叫方來...

設計模式六(門面模式)

門面模式 門面模式 facade pattern 又叫外觀模式,提供了乙個統一介面,用來訪問子系統中的一群介面。其主要特徵是定義了乙個高層介面,讓子系統更容易使用,屬於結構型模式。其實,在我們日常的編碼工作中,我們都在有意無意的大量使用門面模式,但凡只要高層模組需要排程多個子系統 2 個以上類物件 ...