【門面模式】
也稱為 外觀模式。
要求乙個子系統的外部與內部的通訊必須通過乙個統一的物件進行。門面模式提供乙個高層次的介面,使得子系統更易於使用。
門面模式主要有兩部分組成:
* facade門面角色
客戶端可以呼叫這個角色的方法。此角色知道所有子系統的所有功能和職責。一般情況下,本角色會將所有客戶端發來的請求委派到對應的子系統去,也就是說該角色沒有實際的業務邏輯,只是乙個委託類。
* subsystem子系統角色
可以同時有乙個或多個子系統。每乙個子系統都不是乙個單獨的類,而是乙個類的集合。子系統並不知道門面的存在。相對於子系統而言,門面角色知識另外乙個客戶端而已。
【門面模式 例子】
package com.higgin.facade;/**【執行結果】* 產品經理 */
class
productmanager}/*
* * 程式設計師 */
class
programmer}/*
* * 美工 */
class
artdesigner}/*
* * 專案經理
* 管理者 產品經理、程式設計師、美工 */
class
projectmanager}/*
* * 門面客戶端 */
public
class
testfacade
}
【門面模式 優點】
* 減少系統的相互依賴
所有的依賴都是對門面物件的依賴,與子系統無關。
* 提高了系統的靈活性
依賴減少了,靈活性自然就提高了。不管子系統內部如何變化,只要不影響到門面物件,任你自由活動。
* 提高安全性
想讓你訪問子系統的哪些業務就開通哪些業務,不在門面上開通的方法則無法訪問。
【門面模式 缺點】
不符合開閉原則,對修改關閉,對擴充套件開放。子系統有修改的情況,唯一能修改的就是門面角色的**。
【門面模式 使用場景】
* 為乙個複雜的模組或子系統提供乙個共外界訪問的介面。
* 子系統相對獨立,外界對子系統的訪問只要黑箱操作即可。
* 預防低水平人員帶來的風險擴散
【門面模式 注意事項】
一般情況下,乙個子系統主要有乙個門面就夠了。
下面情況可能會有多個門面:
* 門面已經龐大到不能忍受的地步
如果乙個純潔的門面物件已經超過了200行**,雖然都是簡單的委託操作,也建議拆成多個門面,否則會帶來維護和擴充套件的麻煩。如何拆分呢?按照功能拆分是非常好的原則:如乙個運算元據庫的門面類可以拆分成:查詢門面類、刪除門面類、更新門面類。
* 子系統可以提供不同的訪問路徑
classa、classb、classc是乙個子系統中的3對獨享,現在有兩個不用的高層模組想要訪問該子系統,模組一可以完整地訪問所有業務邏輯,也就是**中的facade類,它是子系統的信任模組。二模組二可以是受限制訪問物件,只能訪問classb的methodb()方法。
18 門面模式
要求乙個子系統的外部與其內部的通訊必須通過乙個統一的物件進行。門面模式提供乙個高層次的介面,使得子系統更易於使用。門面模式注重 統一的物件 也就是提供乙個訪問子系統的介面,除了這個介面不允許有任何訪問子系統的行為發生 門面模式的類圖 facade是門面角色,此角色知曉子系統的所有功能和責任,一般會將...
011 門面模式
8 python與設計模式 門面模式假設有一組火警報警系統,由三個子元件構成 乙個警報器,乙個噴水器,乙個自動撥打 的裝置。其抽象如下 class alarmsensor defrun self print alarm ring.class watersprinker defrun self pri...
(05)門面模式
去醫院看病,可能要去 門診 劃價 取藥,讓患者覺得很複雜。如果有提供接待人員,患者只要和接待員溝通,剩下的交給接待員來處理,這樣就會方便很多。再例如某 展示的資料很多,前端可能呼叫10個介面才能拿到所有首頁的資料。如果後台能前端提供乙個介面,並在該介面中呼叫其他10個介面組裝資料,再把資料返回給前端...