1. 程式人生 > >設計模式——門面模式

設計模式——門面模式

mem 設計 log 單獨 disk 集合 mark 允許 技術

  • 定義

    一個子系統的外部與內部的通信必須通過一個統一的對象進行。門面模式提高一個高層次的接口,使得子系統更易實現。

門面對象就是一個提供外部訪問子系統的一個接口,除了這個接口不允許有任何訪問子系統的行為發生。

  • Facede門面角色

    -客戶端調用門面方法,通過該角色將客戶端的請求委派到相應的子系統中,改系統沒有實際的業務邏輯。

  • subsystem子系統角色

    可以同時擁有一個或者多個子系統。每個子系統都不是一個單獨的類,而是一個類的集合。子系統不知道門面的存在,對於子系統而言,門面僅僅是一個客戶端而已。

  • UML圖

    技術分享圖片

技術分享圖片

    /**
 * cpu子系統類
 * @author Administrator
 *
 */
public class CPU 
{
    public static final Logger LOGGER = Logger.getLogger(CPU.class);
    public void start()
    {
        LOGGER.info("cpu is start...");
    }
    
    public void shutDown()
    {
        LOGGER.info("CPU is shutDown...");
    }
}
    public class CPU 
{
    public static final Logger LOGGER = Logger.getLogger(CPU.class);
    public void start()
    {
        LOGGER.info("cpu is start...");
    }
    
    public void shutDown()
    {
        LOGGER.info("CPU is shutDown...");
    }
}
    public class Disk
{
    public static final Logger LOGGER = Logger.getLogger(Disk.class);
    public void start()
    {
        LOGGER.info("Disk is start...");
    }
    
    public void shutDown()
    {
        LOGGER.info("Disk is shutDown...");
    }
}
    public class Memory
{
    public static final Logger LOGGER = Logger.getLogger(Memory.class);
    public void start()
    {
        LOGGER.info("Memory is start...");
    }
    
    public void shutDown()
    {
        LOGGER.info("Memory is shutDown...");
    }
}
    public class Computer
{
    public static final Logger LOGGER = Logger.getLogger(Computer.class);
    
    private CPU cpu;
    private Memory memory;
    private Disk disk;
    public Computer()
    {
        cpu = new CPU();
        memory = new Memory();
        disk = new Disk();
    }
    public void start()
    {
        LOGGER.info("Computer start begin");
        cpu.start();
        disk.start();
        memory.start();
        LOGGER.info("Computer start end");
    }
    
    public void shutDown()
    {
        LOGGER.info("Computer shutDown begin");
        cpu.shutDown();
        disk.shutDown();
        memory.shutDown();
        LOGGER.info("Computer shutDown end...");
    }
}
    public class Cilent {
    public static final Logger LOGGER = Logger.getLogger(Cilent.class);
    public static void main(String[] args) 
    {
        Computer computer = new Computer();
        computer.start();
        LOGGER.info("=================");
        computer.shutDown();
    }

}
  • 門面模式優點:

    1.減少系統之間相互依賴。想要訪問子系統就必須經過門面對象。
    2.提高靈活性,子類系統可以根據需求變更改變。
    3.只能同過門面模式訪問,可以通過門面對象設置權限。

  • 門面模式缺點

    1.不符合開閉原則,對修改關閉,對擴展開放。一旦出現問題就必須修改門面角色代碼。

設計模式——門面模式