设计模式-观察者模式
来源:互联网 发布:数据分析面试题及答案 编辑:程序博客网 时间:2024/06/16 05:57
一 、定义
观察者模式让多个观察者对象同时监听一个被观察者,当被观察者对象状态发生改变时,会通知所有观察者,让他们更新自己。
二 、构成
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("我的状态改变了");
}
}
输出:
我的状态改变了
我的状态改变了
我的状态改变了
我的状态改变了
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- 设计模式 观察者模式
- 设计模式-观察者模式
- 设计模式-【观察者模式】
- 设计模式-观察者模式
- 设计模式 -- 观察者模式
- 设计模式-观察者模式
- 【设计模式】观察者模式
- 设计模式- 观察者模式
- 设计模式- 观察者模式
- 设计模式--观察者模式
- 单例模式
- NYOJ 19 擅长排列的小明
- Thinkphp中函数的使用方法
- JAVA中创建ZIP文件,并向ZIP文件中写入并读取条目和数据
- Android-Volley-联网的基本用法
- 设计模式-观察者模式
- 在windows上安装ubutnu双系统,并且利用easybcd设置开机双启动项 并按照sougou输入法
- [EverString收录] Dr.Elephant用户指南
- linux如何查找大文件以及大文件夹
- xcode运行到真机报错 图片问题
- VS里调用DLL内存问题
- Nginx反向代理
- boost::mutex的最简单的例子
- init?(coder aDecoder: NSCoder)