1.观察者模式有四个角色:
抽象被观察者角色:定义注册观察者,删除观察者和通知观察者方法。
具体被观察者角色:抽象被观察者角色的具体实现。
抽象观察者角色:定义一个接收消息更新方法。
具体观察者角色:抽象观察者角色的具体实现。
抽象被观察者角色接口定义:
package renchaofeng_observer; public interface Observerable { void registerObserver(Observer observer);//注册观察者 void removeObserver(Observer observer);//移除观察者 void notifyObserver();//通知观察者 void setMessage(String message); }具体被观察者实现:
package renchaofeng_observer; import java.util.*; public class ObserverableImpl implements Observerable { List<Observer> observers = new ArrayList<Observer>(); private String message=null; public void registerObserver(Observer observer) { observers.add(observer); } public void removeObserver(Observer observer) { if(!observers.isEmpty()) { observers.remove(observer); } } @Override public void notifyObserver() { for(Observer o : observers) { o.update(message); } } public void setMessage(String message) { this.message = message; }; }抽象观察者接口定义:
package renchaofeng_observer; public interface Observer { void update(String message);//接收通知消息做出更改处理 }具体观察者实现:
package renchaofeng_observer; public class ObserverLi implements Observer { @Override public void update(String message) { System.out.println("小李收到消息:"+message); } } package renchaofeng_observer; public class ObserverWang implements Observer { @Override public void update(String message) { System.out.println("小王收到消息:"+message); } }测试类:
package renchaofeng_observer; import org.junit.Test; public class ObserverTest { @Test public void testonef() { Observerable obable = new ObserverableImpl(); Observer li = new ObserverLi(); Observer wang = new ObserverWang(); obable.registerObserver(li); obable.registerObserver(wang); obable.setMessage("谷歌牛逼。。"); obable.notifyObserver(); } }输出结果:
小李收到消息:谷歌牛逼。。 小王收到消息:谷歌牛逼。。
so,观察者介绍完毕。
参考:https://blog.csdn.net/u012233285/article/details/52966870