观察者模式就是有一个被观察者和多个观察者,是一对多关系。当被观察者发出某些信息时,观察者会根据信息进行相应的处理动作。
直接上代码,直观清晰。
定义被观察者,以及被观察者类。由于被观察者与观察者是一对多的关系,所以被观察者可以添加和移除观察者。
package guanchazhe;
//定义被观察者
public interface IObserverable {
//添加观察者
void addObderver(IObserver iobserver);
//删除观察者
void delObderver(IObserver iobserver);
//向观察者发送消息
void sendMessagToObderver(String message);
}
package guanchazhe; import java.util.ArrayList; import java.util.List; public class Observerable implements IObserverable { private List<IObserver> observers; public Observerable() { //在构造被观察者时,创建观察者集合。 observers=new ArrayList<>(); } @Override public void addObderver(IObserver iobserver) { //向观察者集合添加观察者 observers.add(iobserver); } @Override public void delObderver(IObserver iobserver) { //从观察者集合移除观察者 observers.remove(iobserver); } @Override public void sendMessagToObderver(String message) { //向观察者发送消息。 for (IObserver observer : observers) { observer.handMessage(message); } } }
定义观察者
package guanchazhe; //定义观察者 public interface IObserver { void handMessage(String message); }
package guanchazhe; public class Observer1 implements IObserver { @Override public void handMessage(String message) { // TODO Auto-generated method stub System.out.println("Observer1 收到: "+message+" ,进行处理"); } } package guanchazhe; public class Observer2 implements IObserver { @Override public void handMessage(String message) { // TODO Auto-generated method stub System.out.println("Observer2 收到: "+message+" ,进行处理"); } }
生成测试:
package guanchazhe; public class Test { public static void main(String[] args) { IObserver one=new Observer1(); IObserver two=new Observer2(); IObserverable observerable=new Observerable(); //被观察者添加观察者 observerable.addObderver(one); observerable.addObderver(two); //被观察者发出信息。 observerable.sendMessagToObderver("来玩呀"); System.out.println("------------------------------"); //被观察者移除观察者。 observerable.delObderver(two); observerable.sendMessagToObderver("开团了"); } }
结果:
Observer1 收到: 来玩呀 ,进行处理
Observer2 收到: 来玩呀 ,进行处理
------------------------------
Observer1 收到: 开团了 ,进行处理