java设计模式之八:观察者模式
来源:互联网 发布:linux 安装redis 编辑:程序博客网 时间:2024/06/06 01:57
观察者模式作为设计模式之一:在各个项目中都有大量的引用,例如Listener。
观察者模式的关键是:被观察者产生了变化或者达到一定要求,就通知观察者。而不是观察者时刻去检查被观察者的状态。
举例一:天气变化,显示牌显示气温
天气:被观察者
显示牌:观察者。
气象站:客户端。
天气发生了变化,气象站作为客户端需要调用被观察者的提醒方法,提醒观察者。
举例二:Android鼠标点击按钮
被观察者:按钮
观察者:onClickListener
客户端:鼠标
举例三:spring启动,spring启动需要加载配置文件,会有n个ContextLoaderListener implments ServletContextListener
被观察者:spring配置文件
观察者:ContextLoaderListener
客户端:tomcat容器
类图:
观察者接口
interface Observer{ void update(String message);}观察者实现类:
class ConcreteObServer implements Observer{ @Override public void update(String message) { System.out.println(message); }}
被观察者接口:
interface BeObserver{ void addObserver(Observer observer); void remObserver(Observer observer); void notifyObserver(String message);}
被观察者实现类
class ConcreteBeObServer implements BeObserver{ List<Observer> list=new ArrayList<>(); @Override public void addObserver(Observer observer) { //添加观察者的操作由客户端调用 list.add(observer); } @Override public void remObserver(Observer observer) { list.remove(observer); } @Override public void notifyObserver(String msg) { //遍历观察者集合,通知观察者 for(Observer observer:list) observer.update("天气改变了,变成了 "+msg); }}
public static void main(String[] args) { BeObserver beObserver = new ConcreteBeObServer(); Observer o1 = new ConcreteObServer(); Observer o2=new ConcreteObServer(); beObserver.addObserver(o1); beObserver.addObserver(o2); int now = 23; //当前温度为23 now++;//气温变化 beObserver.notifyObserver(now + ""); }
结果:
天气改变了,变成了 24天气改变了,变成了 24
阅读全文
0 0
- java设计模式之八:观察者模式
- Java设计模式(八)观察者模式 迭代器模式
- java设计模式之“观察者设计模式”
- Java设计模式之观察者设计模式
- 《java设计模式》之观察者设计模式
- Java设计模式之观察者
- Java设计模式之观察者
- Java设计模式之Observer(观察者)模式
- Java设计模式之Observer 观察者模式
- Java设计模式之Observer-观察者模式
- java 设计模式之二-观察者模式
- Java设计模式之观察者模式
- java设计模式之观察者模式
- java设计模式之观察者模式Observer
- java设计模式之观察者模式
- Java设计模式之观察者模式
- JAVA设计模式之观察者模式2
- java与设计模式之观察者模式
- ElasticSearch作为搜索引擎-Spring Boot集成
- js中的路径跳转问题
- C语言万年历(n排)
- circuits.com上的电路小实验
- iOS中WKWebView的应用
- java设计模式之八:观察者模式
- jzoj5441【NOIP2017提高A组冲刺11.1】序列
- 解读项目中localstorage的使用
- RecyclerView无法按键控制移动的解决办法--给view添加焦点
- CC3200学习之IO口配置
- codeforces 876F High Cry (思维,位运算)
- Java8 Stream的深入学习
- //输入不同对象的姓名、性别、年龄、体重和住址等信息,并输出显示。
- Redis消息的发布/订阅