设计模式之外观模式(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的门面类,控制子系统的功能

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