观察者模式

来源:互联网 发布:软件项目工作量评估 编辑:程序博客网 时间:2024/06/04 19:56

1.抽象主题角色(接口或者抽象类)

/** * 抽象主题角色 * 主题角色把所有的观察者对象的引用保存在一个列表里; * 每个主题都可以有任何数量的观察者。 * 主题提供一个接口可以加上或撤销观察者对象;主题角色又叫做抽象被观察者(Observable)角色 */public interface Watched {public void addWatcher(Watcher watch);public void removeWatcher(Watcher watch);public void notifyWatchers(String str);}

2.抽象观察者(Observer)角色 (为所有的具体观察者定义一个接口,在得到通知时更新自己)

//抽象观察者public interface Watcher {public void update(String str);}

3.具体主题(ConcreteSubject)角色

/** * 具体主题(ConcreteSubject)角色: * 保存对具体观察者对象有用的内部状态; * 在这种内部状态改变时给其观察者发出一个通知; * 具体主题角色又叫作具体被观察者角色; * @author gulijiang */public class ConcreteWatched implements Watched {private List<Watcher> list = new ArrayList<Watcher>();@Overridepublic void addWatcher(Watcher watch) {list.add(watch);}@Overridepublic void removeWatcher(Watcher watch) {list.remove(watch);}@Overridepublic void notifyWatchers(String str) {for (Watcher watcher : list) {watcher.update(str);}}}

4.具体观察者(ConcreteObserver)角色

public class ConcreteWatcher implements Watcher {@Overridepublic void update(String str) {System.out.println(str);}}

5.测试类
public class Test {public static void main(String[] args) {Watched girl = new ConcreteWatched();Watcher watcher1 = new ConcreteWatcher();Watcher watcher2 = new ConcreteWatcher();Watcher watcher3 = new ConcreteWatcher();girl.addWatcher(watcher1);girl.addWatcher(watcher2);girl.addWatcher(watcher3);girl.notifyWatchers("开心");girl.removeWatcher(watcher2);girl.notifyWatchers("不开心");}}

原创粉丝点击