每天一设计模式之观察者模式
来源:互联网 发布:2017淘宝红包口令多少 编辑:程序博客网 时间:2024/05/16 12:24
每天一设计模式之观察者模式
观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化的时候会通知所有观察者对象,使他们能够自动更新自己.
观察者模式结构图:
样例代码:
代码来源:大话设计模式
代码故事,老板回来了,大家不要玩了,做事
主题:
package com.test;
public interface Subject {
public void attach(Observer observer);
public void detach(Observer observer);
public void notifyIt();
public String getState();
}
玩股票的
package com.test;
public class StockObserver extends Observer {
public StockObserver(String name, Subject sub) {
super(name, sub);
}
@Override
public void update() {
System.out.println(sub.getState() + name + "关闭股票行情,继续工作!");
}
}
观察者:
package com.test;
public abstract class Observer {
protected String name;
protected Subject sub;
public Observer(String name, Subject sub) {
this.name = name;
this.sub = sub;
}
public abstract void update();
}
老板:
package com.test;
import java.util.ArrayList;
import java.util.List;
public class Boss implements Subject {
private List public void setState(String state) { public void attach(Observer observer) { } public void detach(Observer observer) { } public void notifyIt() { } public String getState() { } 测试: package com.test; public class Test { wo.attach(tongshi1); wo.detach(tongshi1); wo.setState("我回来了"); wo.notifyIt();
private String state;
this.state = state;
}
observers.add(observer);
observers.remove(observer);
for (Observer ob : observers) {
ob.update();
}
// TODO Auto-generated method stub
return state;
}
public static void main(String[] args) {
Boss wo = new Boss();
StockObserver tongshi1 = new StockObserver("飞", wo);
StockObserver tongshi2 = new StockObserver("勇", wo);
wo.attach(tongshi2);
}
}