Mentira patrón de diseño -java poner en práctica (14) - el modo de observador

el modo observador, también conocido como publicar - suscribirse (publicación / suscripción) modelo, define relación de dependencia de uno a muchos observadores tienen múltiples objetos monitorear simultáneamente un objeto de tema. Este objeto de tema cuando cambia el estado, se notificará a todos los objetos de observación, lo que les permite actualizar automáticamente.
Por ejemplo:
en el trabajo, si el jefe no está, algunas personas podrían relajarse, ver las noticias o vistazo a la acción. Esta necesidad de tiempo para tener un momento personal de observar los movimientos de la versión anterior, si el jefe regresó, informarle pronto, por lo que rápidamente se llega a trabajar.

1. observador interfaz de cambio de tema se encuentra, el método que se realizará.

public interface IObserver {
	
	void goToWork();
	
}

2. Los observadores reales

//看新闻的同事
public class NewsObserver1 implements IObserver {

	private String name;
    public NewsObserver(String name) {
       this.name = name;
    }
    
    @Override
    public void goToWork() {
        System.out.println(name + "停止看新闻,开始工作。");
    }

}
//看体育赛事的同事
public class SportsObserver1 implements IObserver {

	private String name;
	
	public SportsObserver(String name) {
		this.name = name;
	}
	
	@Override
	public void goToWork() {
		System.out.println(name + "停止看体育赛事,开始工作。");
	}

}
// 看股票的同事
public class StockObserver1 implements IObserver {
    
    private String name;
    
    public StockObserver(String name) {
        this.name = name;
    }

    @Override
    public void goToWork() {
        System.out.println(name + "停止炒股,开始工作。");
    }
}

3. El tema de la interfaz, es responsable de añadir, borrar observador, y notificaciones de envío

public interface ISubject {
	
	void addObserver(IObserver iObserver);
    void delObserver(IObserver iObserver);
    void bossReturn();
	
}

4. El tema de la clase de implementación

import java.util.ArrayList;
import java.util.List;
public class NotifySubject1 implements ISubject {

    List<IObserver> observers;
    
    @Override
    public void addObserver(IObserver iObserver) {
        if (observers == null) {
            observers = new ArrayList<>();
        }
        observers.add(iObserver);
    }

    @Override
    public void delObserver(IObserver iObserver) {
        if (observers == null || observers.isEmpty()) {
            return;
        }
        observers.remove(iObserver);
    }

    // 通知每一个加入过的观察者,去执行主题变更时的方法
    public void notifyObserver() {
        for (IObserver iObserver : observers) {
            iObserver.goToWork();
        }
    }

    @Override
    public void bossReturn() {
        System.out.println("boss回公司了,大家赶紧开始工作");
        notifyObserver();
    }
    
}

El código principal del programa

//主程序代码
public class Test1 {
	
    public static void main(String[] args) {
    	
        IObserver xiaoMing = new NewsObserver1("小明");
        IObserver xiaoWang = new SportsObserver1("小王");
        IObserver xiaoLi = new StockObserver1("小李");
        
        ISubject boss = new NotifySubject1();
        boss.addObserver(xiaoMing);
        boss.addObserver(xiaoWang);
        boss.addObserver(xiaoLi);
        
        boss.bossReturn();  
            
        System.out.println("=== 这次忘记通知小王了 ===");        
        boss.delObserver(xiaoWang);
        boss.bossReturn();    
        System.out.println("=== 小王被老板逮到了 ===");      
        
    }
    
}

Los resultados son los siguientes:
Aquí Insertar imagen Descripción
los paquetes de Java proporcionadas en las clases de java.util observables e interfaces se pueden realizar también el modo observador Observador.
En el que el espectador clase se implementa interfaz de clase observable observado, al llamar al método setChanged (), se representa un cambio en el observador, esta vez se llama cuando los notifyObservers de visualización () método invoca la interfaz en el Observer de actualización (observable O, el método objeto arg). Si los llamados notifyObservers (Object arg) método de observador, los parámetros necesarios puede también pasar a través de addObserver (Observador o), deleteObserver ( Observador o) método para agregar, borrar espectador.
El ajuste del código después de la siguiente:
1. La categoría de la materia que debe observarse

import java.util.Observable;
public class NotifySubject2 extends Observable {
	
    String message;    
    
    public NotifySubject2() {
        message = "你们玩吧,我帮你们观察boss";
        System.out.println("NotifySubject: " + message);
    }
    
    public void bossReturn(){
        message = "boss回公司了,大家赶紧开始工作";
        System.out.println("NotifySubject: " + message);
        setChanged();
        this.notifyObservers(message);
    }
    
}

2. Clase observador

import java.util.Observable;
import java.util.Observer;
//看新闻的同事
public class NewsObserver2 implements Observer {
	
	private String name;
	
	public NewsObserver2(String name) {
		this.name = name;
	}
	
	@Override
	public void update(Observable o, Object arg) {
		System.out.println(name + "收到消息:" + arg + "。 停止看新闻,开始工作。");
	}
	
}
import java.util.Observable;
import java.util.Observer;
//看体育赛事的同事
public class SportsObserver2 implements Observer {
	
	private String name;
	
	public SportsObserver2(String name) {
		this.name = name;
	}
	
	@Override
	public void update(Observable o, Object arg) {
		System.out.println(name + "收到消息:" + arg + "。 停止看体育赛事,开始工作。");
	}
	
}
import java.util.Observable;
import java.util.Observer;
//看股票的同事
public class StockObserver2 implements Observer {
	
	private String name;
	
	public StockObserver2(String name) {
		this.name = name;
	}
	
	@Override
	public void update(Observable o, Object arg) {
		System.out.println(name + "收到消息:" + arg + "。 停止炒股,开始工作。");
	}
	
}

3. El programa principal:

import java.util.Observer;
//主程序代码
public class Test2 {
	
    public static void main(String[] args) {
    	
        Observer xiaoMing = new NewsObserver2("小明");
        Observer xiaoWang = new SportsObserver2("小王");
        Observer xiaoLi = new StockObserver2("小李");
        
        NotifySubject2 boss = new NotifySubject2();
        boss.addObserver(xiaoLi);
        boss.addObserver(xiaoWang);
        boss.addObserver(xiaoMing);
        boss.bossReturn();
        
        System.out.println("=== 这次忘记通知小王了 ===");
        
        boss.deleteObserver(xiaoWang);;
        boss.bossReturn();
        
        System.out.println("=== 小王被老板逮到了 ===");
        
    }
    
}

Los resultados son como sigue:
Aquí Insertar imagen Descripción
Observador explicación específica y presente observables a hacer clic

Publicado 80 artículos originales · ganado elogios 59 · vistas 4353

Supongo que te gusta

Origin blog.csdn.net/qq_44458489/article/details/105069320
Recomendado
Clasificación