java设计模式-观察者(发布-订阅)模式
2017-09-22 10:16
896 查看
接口1 被观察者(主题)接口
// 抽象主题角色,watched:被观察
public interface Watched {
public void addWatcher(Watcher watcher);//添加一个观察者
public void removeWatcher(Watcher watcher);//删除一个观察者
public void notifyWatchers(String str);//唤醒所有的观察者
}
接口2 观察者 当发现主题有什么 变换时他的update方法会被调用
// 抽象观察者角色 Watcher:观察者
public interface Watcher {
public void update(String str);//被唤醒后进行一些逻辑处理
}
实现接口类1 观察者的实现类 其中实现了观察者接口
// 具体的观察者
public class ConcreteWatcher implements Watcher {
@Override
public void update(String str) {
//观察者进行逻辑处理
System.out.println(str);
}
}
实现接口类2 实现被观察者接口
import java.util.ArrayList;
import java.util.List;
// 被观察者 主题
public class ConcreteWatched implements Watched {
// 存放观察者 一个被观察者中存在多个观察者 所有需要一个集合
private List<Watcher> list = new ArrayList<Watcher>();
@Override
public void addWatcher(Watcher watcher) {
list.add(watcher);
}
@Override
public void removeWatcher(Watcher watcher) {
list.remove(watcher);
}
@Override
public void notifyWatchers(String str) {
// 自动调用实际上是主题进行调用的
for (Watcher watcher : list) {
watcher.update(str);
}
}
}
测试主方法
public class TestMain {
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("开心");
}
}
// 抽象主题角色,watched:被观察
public interface Watched {
public void addWatcher(Watcher watcher);//添加一个观察者
public void removeWatcher(Watcher watcher);//删除一个观察者
public void notifyWatchers(String str);//唤醒所有的观察者
}
接口2 观察者 当发现主题有什么 变换时他的update方法会被调用
// 抽象观察者角色 Watcher:观察者
public interface Watcher {
public void update(String str);//被唤醒后进行一些逻辑处理
}
实现接口类1 观察者的实现类 其中实现了观察者接口
// 具体的观察者
public class ConcreteWatcher implements Watcher {
@Override
public void update(String str) {
//观察者进行逻辑处理
System.out.println(str);
}
}
实现接口类2 实现被观察者接口
import java.util.ArrayList;
import java.util.List;
// 被观察者 主题
public class ConcreteWatched implements Watched {
// 存放观察者 一个被观察者中存在多个观察者 所有需要一个集合
private List<Watcher> list = new ArrayList<Watcher>();
@Override
public void addWatcher(Watcher watcher) {
list.add(watcher);
}
@Override
public void removeWatcher(Watcher watcher) {
list.remove(watcher);
}
@Override
public void notifyWatchers(String str) {
// 自动调用实际上是主题进行调用的
for (Watcher watcher : list) {
watcher.update(str);
}
}
}
测试主方法
public class TestMain {
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("开心");
}
}
相关文章推荐
- Java 设计模式之观察者模式(发布/订阅模式)
- java笔记--设计模式之观察者(订阅/发布)模式
- Java设计模式之观察者模式(发布/订阅模式)
- 设计模式(三)观察者模式Observer(发布订阅)
- 设计模式之观察者模式(发布-订阅模式publish/Subscribe)
- 设计模式二:观察者模式(发布订阅模式)
- JS设计模式 - 观察者模式与发布/订阅模式
- 十六 设计模式之观察者模式(发布订阅模式)
- 设计模式初探-观察者模式(OBSERVER)又称发布-订阅(Publish-Subscribe)依赖(Dependents)
- 设计模式-观察者模式(发布订阅模式)
- 【JAVA设计模式-第四课】观察者模式-屌丝求职记+新闻订阅
- javascript设计模式学习之八_发布订阅(观察者)模式
- 学习javascript设计模式之发布-订阅(观察者)模式
- 设计模式(二)观察者模式和发布订阅模式(Observer)
- 设计模式--观察者模式(发布订阅模式)
- 【GOF23设计模式】_观察者模式_广播机制_消息订阅_网络游戏对战原理_自带类与接口JAVA251-252
- 我理解的设计模式:观察者模式(订阅发布模式)
- 设计模式--观察者模式(发布订阅模式)
- 设计模式(三):观察者模式与发布/订阅模式区别
- js设计模式中发布与订阅实现观察者模式例子