Primeiro, vamos apresentar o que é um ouvinte:
Ouvinte - é um programa Java comum que implementa a interface pendente. Este programa é usado especificamente para ouvir chamadas de método de outra classe.
Isso está usando o modo de observador.
O que é o modo de observador:
Define uma dependência um para muitos entre objetos. Quando o estado de um objeto muda, todos os objetos que dependem dele são notificados para atualizar automaticamente.
Exemplo:
O addxxxxlistener na programação da GUI é todo o modo de observador.
Por exemplo, adicionando eventos de escuta aos cliques de botão, adicionando eventos de escuta ao teclado, etc.
Três categorias importantes de padrão de observador:
A fonte do evento sendo ouvida, ou seja, o objeto que estamos usando.
O ouvinte registrado é usado especificamente para ouvir os objetos usados atualmente.
O evento de objeto de evento é o objeto que está sendo ouvido!
Vamos primeiro olhar para uma versão simples do monitor escrito por você mesmo.
Versão simples:
Existem fontes de eventos, ouvintes e aulas de teste.
O evento será implementado na próxima versão completa.
Etapas de desenvolvimento:
Etapa 1: Implemente uma pessoa de classe que precisa ser ouvida.
Etapa 2: Implemente uma interface de escuta iPersonRunListener.
Etapa 3: Classe pessoalmente, forneça um método (ou múltiplo, eu forneço 2 métodos aqui) para registrar classes IPersonRunListener, ou seja, addbee e addafter
Etapa 4: A instância da classe IPersonRunListener deve ser mantida na classe Pessoa.
Etapa 5: Ao chamar o método Pessoa.Run, determine se o iPersonRunListener é nulo e, se não é nulo, chame seu método de luta.
Etapa 6: na aula de demonstração, instancie uma pessoa e registre um ouvinte.
Pessoa:
pacote cn.hncu.designpattern1; public class Pessoa {Nome da String Private; ouvinte privado iPersonRunListener1; ouvinte privado iPersonRunListener2; pessoa pública (nome da string) {super (); this.name = nome; } public void run () {if (ouvinte1! = null) {listener1.fighting (); } System.out.println (nome+"run ..."); if (ouvinte2! = null) {ouvinte2.fighting (); }} public void AddBefore (ouvinte iPersonRunListener) {this.Listener1 = ouvinte; } public void addafter (ouvinte iPersonRunListener) {this.Listener2 = ouvinte; }} interface iPersonRunListener {public void Fighting ();}Demonstração
pacote cn.hncu.designpattern1; public class Demo {public static void main (string [] args) {pessoa pessoa = nova pessoa ("zhang san"); IPersonRunListener ouvinte = new iPersonRunListener () {@Override public void Fighting () {// Há muitas coisas que você pode fazer aqui, não apenas a saída //, no entanto, como você ainda não escreveu o objeto de evento, você não pode obter o sistema.out.println ("estar preparado para ele primeiro ..."); }}; Person.addbe antes (ouvinte); A a = novo a (); pessoa.Addafter (a); pessoa.run (); }} classe A implementa iPersonRunListener {@Override public void Fighting () {// Há muitas coisas que você pode fazer aqui, não apenas a saída //, no entanto, como você ainda não escreveu o objeto de evento, você não pode obter o sistema.out.println chamado por quem foi ("Run, descanse ..."); }}Saída:
Adicionar fonte de evento na versão completa:
Aqui, um objeto de evento de evento foi adicionado ao anterior. É considerado a versão completa.
Etapas de desenvolvimento:
Etapa 1: continue adicionando uma classe Personevent com base na página anterior (observe que eu disse que é uma classe, não uma interface), representando o objeto de evento.
Etapa 2: adicione um atributo de pessoa ao objeto Personevent para identificar o objeto de origem do evento.
Etapa 3: Modifique o método de luta da interface do PersonListener e deixe -o receber um parâmetro Personevent.
Etapa 4: No método da classe de classe, se estiver determinado que a propriedade do Pessoal Listener não está vazia, o método de luta é chamado, o Personevent é instanciado e o método de luta é passado para o método de luta.
Etapa 5: No método principal, teste se é o mesmo objeto através do método GetSource de Personevent.
Person.java
pacote cn.hncu.designpattern2; public class Pessoa {private string name; ouvinte privado iPersonRunListener; pessoa pública (nome da string) {super (); this.name = nome; } public void run () {System.out.println (nome+"comece a executar ..."); if (ouvinte! = null) {ouvinte.Fighting (new Personevent (this)); }} public void addPersonListener (ouvinte iPersonRunListener) {this.Listener = ouvinte; } public string getName () {return name; } @Override public string tostring () {return "pessoa [name =" + name + ", ouvinte =" + ouvinte + "]"; }} interface iPersonRunListener {public void Fighting (Personevent pe);} classe Personevent {Pessoa P = null; public Personevent (Pessoa P) {this.p = P; } public string getName () {return p.getName (); } public objeto getSource () {return p; }} // Também podemos escrever uma classe básica que nos ajuda a implementar a interface // grava nosso modelo comum. Se herdarmos esta classe, podemos parar de escrevê -la. // Se houver funções diferentes, nós o escreveremos para substituir esta classe DefaultCatListener implementa o iPersonRunListener {@Override public void Fighting (Personevent PE) {System.out.println ("Ação padrão ..."); }}Demo.java
pacote cn.hncu.designpattern2; public class Demo {public static void main (string [] args) {pessoa p1 = nova pessoa ("zhang san"); Pessoa p2 = nova pessoa ("jack"); IPersonRunListener ouvinte = new iPersonRunListener () {@Override public void Fighting (Personevent PE) {System.out.println (pe.getSource ()+"foi executado ..."); if (pe.getName (). Equals ("zhang san")) {System.out.println (pe.getName ()+"Execute o primeiro lugar ..."); }}}}; p1.AddPersonListener (ouvinte); p2.addpersonListener (ouvinte); p1.run (); p2.run (); Pessoa p3 = nova pessoa ("li si"); P3.AddPersonListener (new DefaultCatListener ()); p3.run (); }}Resultados da demonstração:
Estes são os princípios básicos. Se você alterar a saída do evento para a ação necessária, poderá realizar a função desejada. Adicione um ouvinte e você pode ligar para o método que deseja ligar antes ou depois do método de execução e faça a ação que deseja fazer!
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.