外觀模式(facade pattern)
問題描述:
1. 乙個電源總開關可以控制四盞燈、乙個風扇和一台電視機的啟動和關閉。該電源總開關可以同時控制上述所有電器裝置,電源總開關即為該系統的外觀模式設計。
2. 某系統需要提供乙個檔案加密模組,可以對檔案中的資料進行加密並將加密之後的資料儲存在乙個新檔案中,具體的流程包括三個部分,分別是讀取原始檔、加密、儲存加密之後的檔案。這三個步驟可以封裝在一起,順序進行,作為乙個介面執行。
外觀模式是使用頻率最高的結構型設計模式之一,實現簡單,無論是在web應用軟體或是桌面應用軟體,還是在移動應用軟體中,外觀模式都得到了廣泛的應用。我們通過外觀的包裝,使應用程式只能看到外觀物件,而不會看到具體的細節物件,這樣無疑會降低應用程式的複雜度,並且提高了程式的可維護性。
三、uml類圖
外觀模式沒有統一的類圖,下面的圖可以描述它的一些特性
在外觀模式結構圖中包含如下幾個角色:
● facade(外觀角色):在客戶端可以呼叫這個角色的方法,在外觀角色中可以知道相關的(乙個或者多個)子系統的功能和責任;在正常情況下,它將所有從客戶端發來的請求委派到相應的子系統去,傳遞給相應的子系統物件處理。
● subsystem(子系統角色):在軟體系統中可以有乙個或者多個子系統角色,每乙個子系統可以不是乙個單獨的類,而是乙個類的集合,它實現子系統的功能;每乙個子系統都可以被客戶端直接呼叫,或者被外觀角色呼叫,它處理由外觀類傳過來的請求;子系統並不知道外觀的存在,對於子系統而言,外觀角色僅僅是另外乙個客戶端而已。
(1) 對客戶端遮蔽了子系統元件,減少了客戶端所需處理的物件數目並使得子系統使用起來更加容易;
(2) 實現了子系統與客戶端之間的松耦合關係,這使得子系統的變化不會影響到呼叫它的客戶端,只需要調整外觀類即可;
(3) 乙個子系統的修改對其他子系統沒有任何影響,而且子系統內部變化也不會影響到外觀物件。
五、**實現
下面的**會實現問題一,整個屋子會在你離開的時候斷電,只要按下門面facade開關,就會關閉四棧燈,乙個電扇,乙個tv,且按一定順序。
c++
#include using namespace std;
class lightswitch
};class fanswitch
};class tvswitch
};class switchfacade
// void turn()
fs.turnoff();
ts.turnoff();
}};int main()
設計模式 結構型模式 外觀模式
粗淺地理解,外觀模式的核心思想就是把分散的方法集中到乙個方法a裡呼叫,外部只需要呼叫a方法就可以把所有的方法都跑一遍,簡單省事。例如上圖的病人看病流程。假設有guahao menzhen huajia quyao 4個方法,如果沒有外觀模式,100個地方用到這個流程,四個方法每個都要各寫100遍呼叫...
設計模式 結構型模式 外觀模式
組建乙個家庭影院 傳 統方式解決影院管理 clienttest 傳統方式解決影院管理問題分析 1 在clienttest 的main方法中,建立各個子系統的物件,並直接去呼叫子系統 物件 相關方法,會造成呼叫過程混亂,沒有清晰的過程 2 不利於在clienttest 中,去維護對子系統的操作 3 解...
結構型模式 外觀模式
外觀模式 facade 為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。外觀模式將客戶端與子系統的內部複雜性進行分隔開,使得客戶端只需要與外觀物件打交道,而不需要與子系統內部的很多物件打交道。外觀模式的目的在於減少系統的複雜程度。在物件導向軟體系...