設計模式之外觀模式(6)

外觀模式(Facade),又稱爲門面模式,是一種比較簡單又非常常用的設計模式

目錄

模式定義

類圖

參與者

例子


模式定義

爲子系統中的一組接口提供一個統一的入口。外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。

類圖

參與者

Facade門面角色
       客戶端可以調用這個角色的方法。此角色知曉子系統的所有功能和責任。一般情況下,本角色會將所有從客戶端發來的請求委派到相應的子系統去,也就說該角色沒有實際的業務邏輯,只是一個委託類。

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

例子


      一個保安系統的,由錄像機、電燈、紅外線監控和警報器組成。保安系統的操作人員需要經常將這些儀器啓動和關閉。保安類需要用到所有的錄像機(Camera)、電燈(Light)、感應器(Sensor)和警報器(Alarm)對象,保安覺得使用不方便。應用外觀模式,用控制檯應用程序改進該設計。繪製該模式的UML圖。

//定義一個設備接口
public interface Equipment {
	public void turnOn(); // 打開設備
public void turnOff(); // 關閉設備
}
public class Camera implements Equipment {
    public void turnOn() {
        System.out.println("打開錄像機");
    }
    public void turnOff() {
        System.out.println("關閉錄像機");
    }
}
public class Light implements Equipment {
    public void turnOn() {
        System.out.println("打開電燈");
    }
    public void turnOff() {
        System.out.println("關閉電燈");
    }
}
public class Sensor implements Equipment {
    @Override
    public void turnOn() {
        System.out.println("打開傳感器");
    }
 
    @Override
    public void turnOff() {
        System.out.println("關閉傳感器");
    }
}
public class Alarm implements Equipment {
    @Override
    public void turnOn() {
        System.out.println("打開警報器");
    }
 
    @Override
    public void turnOff() {
        System.out.println("關閉警報器");
    }
}
public class Console {
    private Equipment camera = new Camera();
    private Equipment light = new Light();
    private Equipment sensor = new Sensor();
    private Equipment alarm = new Alarm();
 
    public void turnOnAll() {
        camera.turnOn();
        light.turnOn();
        sensor.turnOn();
        alarm.turnOn();
    }
 
    public void turnOffAll() {
        camera.turnOff();
        light.turnOff();
        sensor.turnOff();
        alarm.turnOff();
    }
}
public class Cline {
 
	public static void main(String[] args) {
        Console console = new Console();
        console.turnOnAll();
        console.turnOffAll();
	}
 
}

通過一個Console的門面類,控制子系統的功能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章