Design Patterns -18 modo de observador (Observer Pattern)

1. Modo de motivação

O estabelecimento de uma relação de dependência entre o objecto e o objecto irá notificar automaticamente outros objectos quando um objecto muda, os correspondentes outros objectos reagir. Aqui, o objeto é alterado é referido como um alvo de observação, e o objeto é referido como um espectador é notificado, o alvo de observação pode corresponder a uma pluralidade de observadores, não há nenhuma conexão entre eles e o espectador, pode ser aumentada como espectador necessário e de exclusão , tornando o sistema mais fácil de expandir, este é o motivo modo padrão de observador.

2. Schema Definition

O padrão observador (Observador Padrão): um tipo de dependências entre muitos definir o objecto, de tal modo que sempre que um estado do objeto alterações, as quais estão relacionadas com o objecto dependente de ser informado e actualizado automaticamente. O observador padrão também conhecido como publicar - modelo de subscrição (Publicação / Assinatura), o modelo - o modo de visualização (Model / View), fonte - ouvinte modo (Fonte / Listener) Modo ou subordinados (dependentes).

Pertencentes aos padrões de comportamento de objetos .

3. Modo Estrutura

Deve prestar atenção quando implementar o padrão observador não pode ser chamado diretamente entre o público-alvo específico e objetos observadores específicos manterá o forte acoplamento entre eles, em violação dos princípios de design orientado a objeto.

O principal papel do modo de observador são os seguintes:

  • tópicos abstratos (Assunto) Papel: Também conhecido como um objeto classes abstratas, que fornece classe agregação e aumento para segurar um objeto espectador, métodos exclui o objeto de observação, métodos abstratos e notificação de todos os observadores.
  • temas específicos (Concrete Assunto) Papel: também conhecido como classe alvo específico que implementa o objetivo resumo do método de notificação, quando as mudanças de tema específico estado interno, notificar todos os objetos observadores registado.
  • Abstract observador (Observador) papel: é uma classe abstrata ou interface, que inclui uma atualizou seu método abstrato, ao receber tema específico de notificação de mudança é chamado.
  • observador específico (observador concreto) papéis: os métodos abstratos definidos no observador abstrato implementadas a fim de atualizar seu status quando a obtenção de objetivos de notificação de alteração.

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();
    }
}

Vejam-se alguns do código fonte vai descobrir que este padrão é bastante comum. Claro, o espectador pode fazer algo, passando alguns parâmetros.

5. Resumo

análise

  • padrão Observer descreve como estabelecer um sistema de dependências entre objetos e objetos, como construir para atender a essa demanda.
  • Esta meta observação tecla de modo e o objeto é para o espectador, um alvo pode ter qualquer número de com isso dependente do observador, uma vez que o estado de destino for alterado, todos os observadores são notificados.
  • Em resposta a esta notificação, cada observador irá atualizar instantaneamente o seu estatuto, para sincronizar com o estado de destino, essa interação também chamado a editora - subscrever (PublishSubscribe). O objetivo é informar a editora, quando emitiu um aviso não precisa saber quem são seus observadores, não pode haver qualquer número de espectadores se inscrever e receber notificações.

vantagem

  • Modo de separação observador pode representar uma camada de camada e de dados lógica e define uma mensagem de actualização mecanismo de transmissão estável, a abstracção interface de actualização, de maneira que pode haver uma grande variedade de diferentes camadas como uma representação específica do papel observador.
  • Estabelecer um visualizador de modelo abstrato acoplado entre o alvo da observação e do observador.
  • Suporta modo Observer transmitido comunicação.
  • modo Observer atender aos requisitos de "abrir e fechar princípio".

deficiência

  • Se um objeto-alvo de observação tem muitas observador direta e indireta, ele irá notificar todos os observadores tem que gastar um monte de tempo.
  • Se há uma dependência circular entre o observador eo alvo observado, observar o alvo irá desencadear chamadas a circular entre eles, pode causar a falha do sistema.
  • O observador padrão é nenhum mecanismo para permitir que o espectador sabe que o objeto alvo observado é como a mudança acontece, mas só sei para observar o alvo mudou.

Acho que você gosta

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