23 Padrões de design Capítulo 13: Java Observer Pattern
Definição: Defina uma dependência um para muitos entre objetos, para que, quando cada objeto altere seu estado, todos os objetos que dependem dele serão notificados e atualizados automaticamente.
Tipo: padrão comportamental
Diagrama de classe:
Geralmente, é necessário nos sistemas de software: se o estado de um objeto mudar, alguns objetos relacionados a ele também mudarão de acordo.
Por exemplo, queremos projetar uma função de menu com o botão direito do mouse. Enquanto clicarmos com o botão direito do mouse na área efetiva do software, um menu será exibido;
Por exemplo, precisamos projetar uma função de implantação automática, assim como quando o Eclipse for desenvolvido, desde que o arquivo seja modificado, o Eclipse implantará automaticamente o arquivo modificado no servidor.
Existe uma semelhança entre essas duas funções, ou seja, um objeto deve sempre monitorar outro objeto e, enquanto seu estado mudar, ele tomará ações correspondentes. De fato, existem muitas soluções que podem conseguir isso, mas o uso do modelo Observer é sem dúvida uma escolha convencional.
A estrutura do padrão do observador
No modo de observador mais básico, os quatro caracteres a seguir estão incluídos:
Observador: No diagrama de classe, você pode ver que existe um contêiner vetor na classe que armazena o objeto Observador (a razão pela qual você usa o vetor em vez de listar é porque existem muitos
Ao encadear, o vetor é seguro, enquanto a lista não é segura), esse contêiner de vetor é o núcleo da classe Observer, e existem outros três métodos: o método de anexo é adicionar um objeto observador a esse contêiner; O método destacar é remover o objeto Observador do contêiner; O método Notify é chamar os métodos correspondentes do objeto Observer, por sua vez. Esse papel pode ser uma interface, uma classe abstrata ou uma classe concreta, porque em muitos casos será misturada com outros padrões; portanto, há mais casos de uso de classes abstratas.
Observador: A função do observador geralmente é uma interface, que possui apenas um método de atualização. Quando o estado do observador mudar, esse método será chamado.
Observador específico: essa função é usada para fácil expansão, e a lógica de negócios específica pode ser definida nessa função.
Observador específico: a implementação específica da interface do observador. Nesta função, a lógica a ser processada quando o estado do objeto é observado muda.
Implementação do código do modo de observador
classe abstrata pública Assunto {Private Vector <Teverver> obs = new Vector <Beserver> (); public void addobserver (observador ob) {this.obs.add (obs); } public void delobserver (observador obs) {this.obs.remove (obs); } Void protegido notifyObServer () {for (observador o: obs) {o.update (); }} abstrato público void dosomething (); } classe pública ConcretaSubject estende o assunto {public void Dosomething () {System.out.println ("Retornado pelo evento Observer"); this.NotifyObServer (); }} Public Interface Observer {public void update (); } public class concreteObServer1 implementa o observador {public void update () {System.out.println ("Observer 1 recebe a mensagem e a processa."); }} classe pública concreteObServer2 implementa o observador {public void update () {System.out.println ("Observer 2 recebe a mensagem e o processa."); }} public class cliente {public static void main (string [] args) {sujeito sub = new concreteSubject (); sub.AdDobServer (novo concretoBServer1 ()); // Adicione o observador1 sub.addobserver (novo concreteObServer2 ()); // Adicione o observador2 sub.Dosomething (); }} Resultados de execução
O evento Observer é revertido e o Observer 1 recebe as informações e o processa.
O Observer 2 recebe as informações e as processa.
Através dos resultados em execução, podemos ver que chamamos apenas o método do assunto, mas os métodos relevantes de ambos os observadores são chamados ao mesmo tempo. Se você olhar cuidadosamente para o código, é realmente muito simples. Não é nada mais do que você associa a classe Observer na classe de assunto e atravessa o método de atualização do Observer no método do Dosomething.
Vantagens do modo de observador
O observador e o observador estão ligeiramente relacionados e estão abstravelmente acoplados, de modo que é mais fácil expandir para ambos.
O modo Observador é um mecanismo de gatilho comumente usado, que forma uma cadeia de gatilho e processa os métodos de cada observador por sua vez. Mas, ao mesmo tempo, isso também é uma desvantagem do modo de observador. Como é desencadeado em uma cadeia, quando há muitos observadores, o problema de desempenho é mais preocupante. Além disso, na estrutura da cadeia, é mais provável que os erros de referência circulares ocorram, fazendo com que o sistema seja falsificado.
Resumir
No idioma Java, existe um observador de interface e sua classe de implementação observável, que geralmente implementa o papel do observador. Podemos ver os métodos de uso dessas duas classes na documentação da API JDK.
Amigos que fizeram VC ++, JavaScript DOM ou AWT Development são incríveis sobre seu processamento de eventos. Depois de entender o padrão do observador, eles têm um certo entendimento dos princípios do mecanismo de processamento de eventos. Se você deseja projetar uma função de um mecanismo de processamento de acionamento de eventos, o uso do modo Observer é uma boa escolha. O Evento Processando Dem (modelo de delegação de delegação) no AWT é implementado usando o modo Observer.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.