外觀模式(Facade Pattern):
一種透過為多個複雜的子系統提供一個一致的介面,而使這些子系統更加容易被訪問的模式。
外觀模式,對外有一個統一介面,外部應用程式不用關心內部子系統的具體的細節,這樣會大大降低應用程式的複雜度,提高了程式的可維護性;外觀模式是迪米特法則的典型應用;
外觀模式,也稱之為門面模式。
外觀模式的角色:外觀(Facade)、子系統(Sub System)和客戶(Client);
外觀模式的案例:需求:計算機啟動時一個複雜的過程,主要包含:BlOS檢查、CPU執行、硬碟(HardDrive)讀取、記憶體(Memory)訪問、作業系統(OS)載入啟動等過程,現需要封裝成一個簡單的啟動供客戶端使用;
實現類圖:
實現程式碼:
/** * 子系統角色 */public class BlOS { public void check() { System.out.println("BlOS檢查..."); } }
/** * 子系統角色 */public class CPU { public void execute() { System.out.println("CPU執行..."); } }
/** * 子系統角色 */public class HardDrive { public void read() { System.out.println("硬碟讀取..."); } }
/** * 子系統角色 */public class Memory { public void access() { System.out.println("記憶體訪問..."); }}
/** * 子系統角色 */public class OS { public void load() { System.out.println("作業系統載入..."); } public void start() { System.out.println("作業系統啟動..."); }}
/** * 門面角色 */public class ComputerFacade { private BlOS bios; private CPU cpu; private HardDrive hardDrive; private Memory memory; private OS os; public ComputerFacade(BlOS bios,CPU cpu,HardDrive hardDrive,Memory memory,OS os) { this.bios = bios; this.cpu = cpu; this.hardDrive = hardDrive; this.memory = memory; this.os = os; } public void start() { this.bios.check(); this.cpu.execute(); this.hardDrive.read(); this.memory.access(); this.os.load(); this.os.start(); } }
/** * 客戶端 */public class FacadeClient { public static void main(String[] args) { // 子系統 BlOS bios = new BlOS(); CPU cpu = new CPU(); HardDrive hardDrive = new HardDrive(); Memory memory = new Memory(); OS os = new OS(); // 門面 ComputerFacade computerFacade = new ComputerFacade(bios, cpu, hardDrive, memory, os); computerFacade.start(); }}
最新評論