Patrón de diseño de Java activado por un guardia de seguridad: patrón de apariencia

Escenarios de aplicación

Para completar una función, el usuario necesita llamar a múltiples interfaces y métodos del proveedor. Cuando el proceso de llamada es complejo, podemos proporcionar una interfaz de alto nivel (nueva apariencia) para ocultar el proceso de llamada complejo al usuario, una variante de el modo adaptador

Modo de apariencia

definición

Ocultar la complejidad del sistema y proporcionar al cliente una interfaz a través de la cual el cliente puede acceder al sistema

intención

Proporcionar una interfaz coherente para un grupo de interfaces en el subsistema. El modo de apariencia define una interfaz de alto nivel, lo que hace que este subsistema sea más fácil de usar.

Principalmente resuelve el problema

Reducir la complejidad de acceder a los subsistemas internos del sistema complejo y simplificar la interfaz del cliente con él.

Cuándo usar

  1. El cliente no necesita conocer las complejas conexiones dentro del sistema, todo el sistema solo necesita proporcionar un "recepcionista"
  2. Definir el punto de entrada del sistema.

Pros y contras

ventaja:

  1. Reducir la interdependencia del sistema
  2. Aumentar la flexibilidad
  3. Seguridad mejorada

Desventajas:
no se ajusta al principio de apertura y cierre, si es problemático cambiar las cosas, la herencia y la reescritura no son las adecuadas.

estructura

Inserte la descripción de la imagen aquí
Roles involucrados:

  1. Rol de fachada: el cliente puede llamar a los métodos de este rol. Este rol conoce las funciones y responsabilidades de los subsistemas relevantes, bajo circunstancias normales, este rol delegará todas las solicitudes del cliente a los subsistemas correspondientes.
  2. Rol de subsistema (subsistema): puede haber uno o más subsistemas al mismo tiempo. Cada subsistema no es una clase separada, sino una colección de clases; cada subsistema puede ser llamado directamente por el cliente, o llamado por el rol de la fachada, el subsistema no conoce la existencia de la fachada, para el subsistema, Facade es solo otro cliente

Historia de seguridad

Como guardia de seguridad, debe estar familiarizado con el sistema de seguridad. El sistema de seguridad actualmente en uso tiene 2 grabadoras de video, 3 luces, 1 sensor remoto y 1 alarma. El operador del sistema de seguridad debe encender y apagar estos instrumentos Con frecuencia. En primer lugar, en el caso de no utilizar el modo de fachada, estos componentes deben ser operados directamente por el operador. Aquí hay un pequeño ejemplo:
Inserte la descripción de la imagen aquí
Clase de operador:

public class Client {
    
    

    static Camera camera1 = new Camera(), camera2 = new Camera();
    static Light light1 = new Light(), light2 = new Light(), light3 = new Light();
    static Sensor sensor = new Sensor();
    static Alarm alarm = new Alarm();

    public static void main(String[] args) {
    
    
        camera1.turnOn("1号录像机");
        camera2.turnOn("2号录像机");
        light1.turnOn("1号灯");
        light2.turnOn("2号灯");
        light3.turnOn("3号灯");
        sensor.activate();
        alarm.activate();
    }
}

Instrumentos:

public class Camera {
    
    

    public void turnOn(String code) {
    
    
        System.out.println("打开录像机:" + code);
    }

    public void turnOff(String code) {
    
    
        System.out.println("关闭录像机:" + code);
    }

    public void rotate(String code) {
    
    
        System.out.println("转动录像机:" + code);
    }
}
public class Light {
    
    

    public void turnOn(String code) {
    
    
        System.out.println("打开灯:" + code);
    }

    public void turnOff(String code) {
    
    
        System.out.println("关闭灯:" + code);
    }

    public void changeBulb(String code) {
    
    
        System.out.println("换灯泡:" + code);
    }
}
public class Sensor {
    
    

    public void activate() {
    
    
        System.out.println("启动感应器");
    }

    public void deactivate() {
    
    
        System.out.println("关闭感应器");
    }

    public void trigger() {
    
    
        System.out.println("触发感应器");
    }
}
public class Alarm {
    
    

    public void activate() {
    
    
        System.out.println("启动警报器");
    }

    public void deactivate() {
    
    
        System.out.println("关闭警报器");
    }

    public void ring() {
    
    
        System.out.println("拉响警报器");
    }
    public void stopRing() {
    
    
        System.out.println("停掉警报器");
    }
}

La siguiente modificación utiliza el modo de fachada:
Inserte la descripción de la imagen aquí
agregue una clase de función de fachada:

public class SecurityFacade {
    
    

    Camera camera1 = new Camera(), camera2 = new Camera();
    Light light1 = new Light(), light2 = new Light(), light3 = new Light();
    Sensor sensor = new Sensor();
    Alarm alarm = new Alarm();

    public void activate() {
    
    
        camera1.turnOn("1号录像机");
        camera2.turnOn("2号录像机");
        light1.turnOn("1号灯");
        light2.turnOn("2号灯");
        light3.turnOn("3号灯");
        sensor.activate();
        alarm.activate();
    }

    public void deactivate() {
    
    
        camera1.turnOff("1号录像机");
        camera2.turnOff("2号录像机");
        light1.turnOff("1号灯");
        light2.turnOff("2号灯");
        light3.turnOff("3号灯");
        sensor.deactivate();
        alarm.deactivate();
    }
}

Modifique la clase de cliente:

public class Client {
    
    

    public static void main(String[] args) {
    
    
        SecurityFacade facade = new SecurityFacade();
        facade.activate();
    }
}

Inserte la descripción de la imagen aquí
Diagrama de clase:
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_34365173/article/details/108082634
Recomendado
Clasificación