設計模式-外觀模式(Facade)
阿新 • • 發佈:2018-12-05
外觀模式又稱為門面模式,為一組類似功能的叢集,比如類庫、子系統等,提供一致的入口供client呼叫
角色和職責:
1.門面(Facade)-Computer:
外觀模式的核心。它被客戶角色呼叫,它熟悉子系統的功能。內部根據客戶角色的需求預定了幾種功能的組合
2.子系統(Packages)=CPU、Memory、Disk:
實現了子系統的功能。它對客戶角色和Facade時未知的。它內部可以有系統內的相互互動,也可以由供外界呼叫的介面
UML圖:
具體原始碼:
/** * CPU */ publicclass CPU { /** * 啟動CPU */ public void startCpu(){ System.out.println("啟動CPU"); } /** * 關閉CPU */ public void shutdownCpu(){ System.out.println("關閉CPU"); } }
/** * 記憶體條 */ public class Memory { public void startMemory(){ System.out.println("啟動記憶體"); } public void shutdownMemory(){ System.out.println("關閉記憶體"); } }
/** * 桌面 */ public class Disk { public void startDisk(){ System.out.println("啟動桌面"); } public void shutdownDisk(){ System.out.println("關閉桌面"); } }
/** * 電腦 */ publicclass Computer { private CPU cpu = null; private Memory memory = null; private Disk disk = null; public Computer(){ this.cpu = new CPU(); this.memory = new Memory(); this.disk = new Disk(); } /** * 啟動電腦 */ public void start(){ this.cpu.startCpu(); this.memory.startMemory(); this.disk.startDisk(); } /** * 關閉電腦 */ public void shutdown(){ this.cpu.shutdownCpu(); this.memory.shutdownMemory(); this.disk.shutdownDisk(); } }
public class Main { public static void main(String[] args) { Computer computer = new Computer(); computer.start();//啟動電腦 System.out.println("------------------------------------------"); computer.shutdown();//關閉電腦 } }
優缺點:
優:
- 鬆散耦合:使得客戶端和子系統之間解耦,讓子系統內部的模組功能更容易擴充套件和維護;
- 簡單易用:客戶端根本不需要知道子系統內部的實現,或者根本不需要知道子系統內部的構成,它只需要跟Facade類互動即可。
- 更好的劃分訪問層次:有些方法是對系統外的,有些方法是系統內部相互互動的使用的。子系統把那些暴露給外部的功能集中到門面中,這樣就可以實現客戶端的使用,很好的隱藏了子系統內部的細節
應用場景:
為複雜的模組或子系統提供外界訪問的模組
子系統相互獨立
在層析結構中,可以使用外觀模式定義系統的每一層的入口。
原始碼地址:https://github.com/qjm201000/design_pattern_facade.git