1. 程式人生 > >設計模式-外觀模式(Facade)

設計模式-外觀模式(Facade)

外觀模式又稱為門面模式,為一組類似功能的叢集,比如類庫、子系統等,提供一致的入口供client呼叫

角色和職責:

1.門面(Facade)-Computer:

   外觀模式的核心。它被客戶角色呼叫,它熟悉子系統的功能。內部根據客戶角色的需求預定了幾種功能的組合

2.子系統(Packages)=CPU、Memory、Disk:

   實現了子系統的功能。它對客戶角色和Facade時未知的。它內部可以有系統內的相互互動,也可以由供外界呼叫的介面

 

UML圖:

 

具體原始碼:

/**
 * CPU
 */
public
class 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("關閉桌面");
    }
}
/**
 * 電腦
 */
public
class 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