设计模式-------观察者模式

观察者接口和具体观察者,观察者实现类一般有多个:信息接受者(比如学生观察老师,老百姓观察天气播报员)

public interface Observer { void update(String data); }

public class Observer1 implements Observer { @Override public void update(String data) { System.out.println("observer1 has received!"+data); } } public class Observer2 implements Observer {

@Override public void update(String data) { System.out.println("observer2 has received!"+ data); } } 主题:被观察者(信息传播者或者分发者) 一般主题接口可以增删改观察者;改(通知,告知)的意思就是自身的变化 被 观察者感知到; 例如老师的电话号码换了,所有通知到的学生会收到老师的电话号码变了;天气播报员告诉所有的 观众朋友明天天气变冷了,注意防寒;上面的内容都在具体的被观察者中实现;

主题接口 public interface Subject { public void attach(Observer mObserver); public void detach(Observer mObserver); public void notice(); /*自身的操作*/ public void operation(); } 具体的被观察者(主题) public class ConSubject implements Subject {

private Vector<Observer> vector = new Vector<Observer>(); private String data;

public String getData() { return data; }

public void setData(String data) { this.data = data; }

@Override public void attach(Observer observer) { vector.add(observer); }

@Override public void detach(Observer observer) { vector.remove(observer); }

@Override public void notice() { Enumeration<Observer> enumo = vector.elements(); while(enumo.hasMoreElements()){ enumo.nextElement().update(data); } } // public void notifyObservers(){ //具体的主题通知所有观察者进行数据响应 // for(int i=0; i<vector.size(); i++){ // Observer obs = vector.get(i); // obs.update(data); // } // }

@Override public void operation() {

} } 测试: Observer obs = new Observer1(); //定义观察者对象 Observer obs2 = new Observer2(); //定义观察者对象 ConSubject subject = new ConSubject(); //定义主题对象 subject.attach(obs); subject.attach(obs2); //主题添加观察者 subject.setData("hello"); //主题中心数据发生变动 subject.notice(); //通知所有观察者进行数据响应

经验分享 程序员 微信小程序 职场和发展