Patrones de diseño -18 modo espectador (patrón de observador)

1. Modo de motivación

El establecimiento de una relación de dependencia entre el objeto y el objeto notificará automáticamente otros objetos cuando un objeto cambia, los correspondientes otros objetos reaccionan. Aquí, el objeto es cambiado se refiere como un objetivo de la observación, y el objeto se conoce como un visor se notifica, el objetivo de observación puede corresponder a una pluralidad de observadores, no hay conexión entre ellos y el espectador, se puede aumentar como espectador sea necesario y de eliminación , haciendo que el sistema sea más fácil de ampliar, este es el motivo modo de patrón de observador.

2. Definición de esquema

El patrón de observador (patrón de observador): un tipo de dependencias entre muchos definir el objeto, de tal manera que cada vez que un estado de los cambios de objeto, que están relacionados objeto dependiente a ser informado y actualiza automáticamente. El patrón de observador también conocido como publicar - modelo de suscripción (publicación / suscripción), el modelo - el modo de visualización (Modelo / Vista), fuente - modo (Fuente / Oyente) de modo o subordinados (dependientes) oyente.

La pertenencia a los patrones de comportamiento del objeto .

3. Modo Estructura

Debe prestar atención a la hora de implementar el patrón de observador no puede ser llamado directamente entre el público objetivo específico y los objetos específicos de observación se mantendrá el estrecho acoplamiento entre ellos, en violación de los principios de diseño orientado a objetos.

El papel principal del modo de observación son los siguientes:

  • temas abstractos (Asunto) Papel: también conocido como clases de objetos abstractos, que proporciona agregación y aumento de la clase para mantener un objeto visor, métodos de objeto de observación Eliminar, métodos abstractos y notificación de todos los observadores.
  • Los temas específicos (hormigón Asunto) Papel: también conocidos como clase de objetivo específico que implementa el objetivo abstracto del método de notificación, cuando los cambios específicos temáticos estado interno, notificar a todos los observadores objeto registrado.
  • Resumen de observador (Observador) papel: es una clase o interfaz abstracta, que incluye una versión actualizada de su método abstracto, al recibir el cambio el tema específico de notificación se llama.
  • observador específica (observador) Hormigón papeles: los métodos abstractos definidos en el observador abstracto implementado con el fin de actualizar su estado en la obtención de los objetivos de notificación de cambio.

4. Código Modo

# 抽象观察者
public interface Observer {
    // 观察者的反应
    void response();
}

# 具体观察者
public class ConcreteObserver1 implements Observer {
    @Override
    public void response() {
        System.out.println("具体观察者 1 作出反应");
    }
}
public class ConcreteObserver2 implements Observer {
    @Override
    public void response() {
        System.out.println("具体观察者 2 作出反应");
    }
}

# 抽象主题
public abstract class Subject {
    protected List<Observer> observerList = new ArrayList<>();

    /**
     * 新增观察者
     */
    public void add(Observer observer) {
        observerList.add(observer);
    }

    public void remove(Observer observer) {
        observerList.remove(observer);
    }

    /**
     * 通知观察者
     */
    public abstract void notifyObserver();
}

# 具体主题
public class ConcreteSubject extends Subject {
    @Override
    public void notifyObserver() {
        System.out.println("具体目标发生变化...");
        for (Observer observer : observerList) {
            observer.response();
        }
    }
}

# Client
public class Client {
    public static void main(String[] args) {
        Subject subject = new ConcreteSubject();
        Observer observer1 = new ConcreteObserver1();
        Observer observer2 = new ConcreteObserver2();

        subject.add(observer1);
        subject.add(observer2);
        subject.notifyObserver();

        subject.remove(observer1);
        subject.notifyObserver();
    }
}

Mira a una parte del código fuente se encuentra que este patrón es bastante común. Por supuesto, el espectador puede hacer algo al pasar algunos parámetros.

5. Resumen

análisis

  • patrón de observador describe cómo establecer un sistema de dependencias entre objetos y objetos, cómo se construye para satisfacer esta demanda.
  • Este objetivo observación tecla de modo y el objeto es para el espectador, un objetivo puede tener cualquier número de con el mismo dependiente del observador, una vez que se cambia el estado de destino, se notificado todos los observadores.
  • En respuesta a esta notificación, cada observador se actualizará al instante su estado, para sincronizar con el estado de destino, esta interacción también llamado el editor - suscribirse (publishsubscribe). El objetivo es informar al editor, cuando se emitió un aviso no necesita saber que sus observadores, no puede haber cualquier número de espectadores suscribirse y recibir notificaciones.

ventaja

  • modo de separación Observador puede representar una capa y datos de la capa lógica, y define una actualización de mensaje mecanismo de transmisión estable, la abstracción interfaz de actualización, por lo que puede haber una variedad de diferentes capas como una representación específica de la función de observador.
  • El establecimiento de un modelo abstracto espectador acoplado entre el objetivo de observación y el observador.
  • Soporta el modo de observador transmiten comunicación.
  • el modo observador cumple con los requisitos de "apertura y cierre de principio".

defecto

  • Si un objeto de destino observación tiene muchos observadores directos e indirectos, se notificará a todos los observadores tienen que pasar mucho tiempo.
  • Si hay una dependencia circular entre el observador y el objetivo observado, observar el objetivo desencadenar llamadas circule entre ellos, puede hacer que el sistema se bloquee.
  • El patrón de observador existe un mecanismo para que el espectador sabe que el objeto de destino es observar cómo ocurre el cambio, pero sólo saber para observar el objetivo ha cambiado.

Supongo que te gusta

Origin www.cnblogs.com/wuqinglong/p/12564514.html
Recomendado
Clasificación