門面模式是對象的結構模式。
門面模式要求一個子系統的外部與其內部的通信必須通過一個統一的門面(Facade)對象進行

何時使用?
1. 為一個復雜子系統提供一個簡單接口
2. 子系統的獨立性
3. 層次化結構

對象圖示意:


1. com.cleversoft.designpatterns.facade.Alarm.java:
package com.cleversoft.designpatterns.facade;

public class Alarm {
    
public void activate() {
        System.out.println(
"Activating the alarm.");
    }

    
public void deactivate() {
        System.out.println(
"Deactivating the alarm.");
    }

    
public void ring() {
        System.out.println(
"Ring the alarm.");
    }

    
public void stopRing() {
        System.out.println(
"Stop the alarm.");
    }
}

2. com.cleversoft.designpatterns.facade.Camera.java:
package com.cleversoft.designpatterns.facade;

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 + " degrees.");
    }
}

3. com.cleversoft.designpatterns.facade.Light.java:
package com.cleversoft.designpatterns.facade;

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(
"Changing the light-bulb.");
    }
}

4. com.cleversoft.designpatterns.facade.Sensor.java:
package com.cleversoft.designpatterns.facade;

public class Sensor {
    
public void activate() {
        System.out.println(
"Activating on the sensor.");
    }

    
public void deactivate() {
        System.out.println(
"Deactivating on the sensor.");
    }

    
public void trigger() {
        System.out.println(
"The sensor has been triggered.");
    }
}

5. com.cleversoft.designpatterns.facade.SecurityFacade.java:
package com.cleversoft.designpatterns.facade;

public class SecurityFacade {
    
private Camera camera1, camera2;

    
private Light light1, light2, light3;

    
private Sensor sensor;

    
private Alarm alarm;

    
public SecurityFacade() {
        camera1 
= new Camera();
        camera2 
= new Camera();
        light1 
= new Light();
        light2 
= new Light();
        light3 
= new Light();
        sensor 
= new Sensor();
        alarm 
= new Alarm();
    }

    
public void activate() {
        camera1.turnOn();
        camera2.turnOn();

        light1.turnOn();
        light2.turnOn();
        light3.turnOn();

        sensor.activate();
        alarm.activate();
    }

    
public void deactivate() {
        camera1.turnOff();
        camera2.turnOff();

        light1.turnOff();
        light2.turnOff();
        light3.turnOff();

        sensor.deactivate();
        alarm.deactivate();
    }
}

6. com.cleversoft.designpatterns.facade.Client.java:
package com.cleversoft.designpatterns.facade;

public class Client {
    
private static SecurityFacade security = new SecurityFacade();

    
public static void main(String[] args) {
        security.activate();
    }
}


參考資料:
1. 《Java與模式》


歡迎大家訪問我的個人網站 萌萌的IT人