來源:《設計模式之禪》java
定義:門面模式也叫外觀模式,要求一個子系統的外部與其內部通訊必須經過一個統一的對象進行。也就是提供一個訪問子系統的接口,除了這個接口不容許任何有任何訪問子系統的行爲發生。設計模式
門面模式角色:安全
facade 門面角色:客戶端調用這個角色訪問子系統。設計
subsystem 子系統角色: code
類圖:對象
代碼:接口
子系統對象io
/** * */ package cc.rico.pattern.facade; /** * @author rico * 子系統對象 */ public class ClazzA { public void option() { System.out.println("###ClazzA.option..."); } }
/** * */ package cc.rico.pattern.facade; /** * @author rico * 子系統對象 */ public class ClazzB { public void option() { System.out.println("###ClazzB.option..."); } }
/** * */ package cc.rico.pattern.facade; /** * @author rico * 子系統對象 */ public class ClazzC { public void option() { System.out.println("###ClazzC.option..."); } }
門面對象:class
/** * */ package cc.rico.pattern.facade; /** * @author rico * 門面對象 */ public class Facade { ClazzA clazzA = new ClazzA(); ClazzB clazzB = new ClazzB(); ClazzC clazzC = new ClazzC(); public void optionA() { clazzA.option(); } public void optionB() { clazzB.option(); } public void optionC() { clazzC.option(); } }
場景類:擴展
/** * */ package cc.rico.pattern.facade; /** * @author rico * 場景類 */ public class Client { /** * @param args */ public static void main(String[] args) { Facade facade = new Facade(); facade.optionA(); //facade.optionB(); //facade.optionC(); } }
門面模式優勢:
減小系統的互相依賴。依賴轉換爲對門面對象的依賴,與子系統無關。
提升靈活性。減小依賴,提升靈活。
提升安全性。只能訪問門面對象暴露的訪問接口。
門面模式缺點:
不符合開閉原則,對修改關閉,對擴展開放,門面對象出現問題,只能對門面對象進行修改。
使用場景:
爲一個複雜的模塊或子系統提供一個供外部訪問的接口。
子系統相對獨立,外界對子系統的訪問只須要黑箱操做便可。
預防低水平開放人員誤操做。
注意事項:
一個子系統能夠有多個門面,
門面太龐大,根據功能劃分門面
子系統提供不一樣的訪問路徑。
門面不參與子系統的業務邏輯,新建一個封裝類,將這個封裝類傳遞給門面對象。
擴展: