外部系统与一个子系统的通信必须通过一个统一的门面对象进行。门面模式的用意是为了为子系统提供一个集中化和简单化的沟通管道,而不能向子系统加入新的行为。
/**
* 子系统角色
*/
public class Camera {
public void turnOn(){
System.out.println("turning on the camera");
}
public void turnOff(){
System.out.println("turning off the camera");
}
public void rotate(int degrees){
System.out.println("rotating the camera by " + degrees);
}
}
/**
* 子系统角色
*/
public class Light {
public void turnOn(){
System.out.println("turning on the light");
}
public void turnOff(){
System.out.println("turning off the light");
}
public void changeBulb(){
System.out.println("change the light-bulb");
}
}
/**
* 子系统角色
*/
public class Sensor {
public void activate(){
System.out.println("activating the sensor");
}
public void deactivate(){
System.out.println("deactivating the sensor");
}
public void trigger(){
System.out.println("the sensor has been triggered");
}
}
/**
* 门面角色
*/
public class SecurityFacade {
private Camera camera1 = new Camera(),camera2 = new Camera();
private Light light1 = new Light(),light2 = new Light();
private Sensor sensor = new Sensor();
public void activate(){
camera1.turnOn();
camera2.turnOn();
light1.turnOn();
light2.turnOn();
sensor.activate();
}
public void deactivate(){
camera1.turnOff();
camera2.turnOff();
light1.turnOff();
light2.turnOff();
sensor.deactivate();
}
}
public class Client {
private static SecurityFacade security = new SecurityFacade();
public static void main(String[] args) {
security.activate();
security.deactivate();
}
}