设计模式-观察者模式

来源:互联网 发布:数据分析面试题及答案 编辑:程序博客网 时间:2024/06/16 03:31

一 、定义

观察者模式让多个观察者对象同时监听一个被观察者,当被观察者对象状态发生改变时,会通知所有观察者,让他们更新自己。

二 、构成

1 抽象观察者:为所有的具体观察者定义一个接口,在得到被观察者的通知时,具体观察者及时更细自己。

2 具体观察者:抽象观察者的实现类,要重写抽象观察者中的方法。

3 抽象被观察者:把所有观察者对象的引用保存在一个集合中,抽象被观察者还提供一个接口,可以增加和删除观察者角色,一般用一个抽象类和接口来实现。

4 具体被观察者:当被观察者状态发生变化时,给集合中的观察者发出通知。

三 、实现

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

//具体的观察者
public class ConcreteWatcher implements Watcher {
public void update(String str) {
System.out.println(str);
}
}

//抽象的被观察者
public interface Watched {
public void addWatcher(Watcher watcher);
public void deleteWatcher(Watcher watcher);
public void notifyAllWatchers(String str);
}


//具体的被观察者
public class ConcreteWatched implements Watched {
private ArrayList<Watcher> list = new ArrayList<>();
public void addWatcher(Watcher watcher) {
list.add(watcher);
}
public void deleteWatcher(Watcher watcher) {
list.remove(watcher);
}
public void notifyAllWatchers(String str) {
for (Watcher watcher : list) {
watcher.update(str);
}
}
}

//测试

public class TestObserver {
public static void main(String[] args) {
Watched watched = new ConcreteWatched();
Watcher watcher1 = new ConcreteWatcher();
Watcher watcher2 = new ConcreteWatcher();
Watcher watcher3 = new ConcreteWatcher();
Watcher watcher4 = new ConcreteWatcher();
watched.addWatcher(watcher1);
watched.addWatcher(watcher2);
watched.addWatcher(watcher3);
watched.addWatcher(watcher4);
watched.notifyAllWatchers("我的状态改变了");
}
}

输出:

我的状态改变了
我的状态改变了
我的状态改变了
我的状态改变了

0 0
原创粉丝点击