1.观察者模式
两个接口,一个主题接口(一般包含了注册观察者,删除观察者,发布三个方法),一个观察者接口(一般只要有一个update,但发布消息时给主题调用).
1.观察者接口
public interface MyObserver { public void update(String name); }
2.主题发布者接口
public interface MySubject { public void addObserver(MyObserver o); public void removeObserver(MyObserver o); public void notifyAllObserver(); }
3.观察者实现
public class MyObserver1 implements MyObserver{ private MySubject subject; public MyObserver1(MySubject subject){ this.subject=subject; this.subject.addObserver(this); } public void update(String name) { // TODO Auto-generated method stub System.out.println("订阅者"+this+"收到"+name); } }
4.主题发布者实现
public class MySubjectImpl implements MySubject { private ArrayList observers; public MySubjectImpl(){ observers=new ArrayList(); } public void addObserver(MyObserver o) { // TODO Auto-generated method stub observers.add(o); } public void removeObserver(MyObserver o) { // TODO Auto-generated method stub int i = observers.indexOf(o); if(i>0){ observers.remove(i); } } public void notifyAllObserver() { // TODO Auto-generated method stub for(int i= 0;i<observers.size();i++){ MyObserver observer = (MyObserver)observers.get(i); observer.update("发布者"+this+"发布的消息"); } } }
5.整合测试,兄弟
public class ObserverSubject { public static void main(String[] args) { MySubjectImpl subject=new MySubjectImpl(); MyObserver1 observer=new MyObserver1(subject); MyObserver1 observer1=new MyObserver1(subject); subject.notifyAllObserver(); } }
结果应该是这样的,他们都收到了消息.
本人倡导的讲解方式:代码示例[学以致用,不仅要知道理论,还要知道理论怎么付诸实践],
文字讲解[不仅知道要怎么用,还要知道是怎么回事],
画图讲解[有图有真相,用图的形式将代码嵌入到理论中,整体理解]