【设计模式】观察者模式
来源:互联网 发布:印度最新人口数据 编辑:程序博客网 时间:2024/06/06 06:32
使用频率:★★★★★
一、什么是观察者模式
一对多的关系,又叫发布-订阅模式,即一个对象的状态发生变化,所有依赖它的对象能够知道该变化并自动更新;
二、补充说明
一对多:发布者是一,订阅者是多;观察目标是一,观察者是多;状态变化者是一,得到变化通知者是多;
三、角色
抽象主题
具体主题
抽象观察者
具体观察者
四、例子,JAVA实现
发布者为ConcreteSubject对象,PlusObserver和SubObserver为观察者对象,接收到发布者的变化通知后分别做自增和自减操作,并打印结果;
抽象主题
package com.pichen.dp.behavioralpattern.observer;import java.util.ArrayList;import java.util.List;public abstract class Subject { private List<Observer> observers = new ArrayList<Observer>(); public void attach(Observer observer) { observers.add(observer); } public void detach(Observer observer){ observers.remove(observer); } public void notifyAllObservers(double value) { for (Observer observer : observers) { observer.update(value); } } public abstract void change(double value);}
具体主题
package com.pichen.dp.behavioralpattern.observer;public class ConcreteSubject extends Subject{ private double value; /** * @return the value */ public double getValue() { return value; } /** * 〈一句话功能简述〉 * 〈功能详细描述〉 * @see com.pichen.dp.behavioralpattern.observer.Subject#change() */ @Override public void change(double value) { this.value = value; System.out.println("original value:" + value); this.notifyAllObservers(value); } }
抽象观察者
package com.pichen.dp.behavioralpattern.observer;public abstract class Observer { public abstract void update(double value);}
具体观察者
package com.pichen.dp.behavioralpattern.observer;public class PlusObserver extends Observer { public PlusObserver(Subject subject) { subject.attach(this); } @Override public void update(double value) { System.out.println("After plus: "+ (++value)); }}
package com.pichen.dp.behavioralpattern.observer;public class SubObserver extends Observer { public SubObserver(Subject subject) { subject.attach(this); } @Override public void update(double value) { System.out.println("After sub: "+ (--value)); }}
调用示例
package com.pichen.dp.behavioralpattern.observer;public class Main { public static void main(String[] args) { Subject subject = new ConcreteSubject(); new SubObserver(subject); new PlusObserver(subject); subject.change(3.0); subject.change(10.2); }}
结果打印
original value:3.0After sub: 2.0After plus: 4.0original value:10.2After sub: 9.2After plus: 11.2
@author 风一样的码农
@blog_url http://www.cnblogs.com/chenpi/
分类: 设计模式
标签: DesignPattern, JAVA
好文要顶关注我 收藏该文
0
0
«上一篇:【设计模式】享元模式
»下一篇:【设计模式】迭代器模式
»下一篇:【设计模式】迭代器模式
0 0
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- 设计模式 观察者模式
- 设计模式-观察者模式
- 设计模式-【观察者模式】
- 设计模式-观察者模式
- 设计模式 -- 观察者模式
- 设计模式-观察者模式
- 【设计模式】观察者模式
- 设计模式- 观察者模式
- 设计模式- 观察者模式
- 设计模式--观察者模式
- 使用MDC为Logback slf4 日志记录线程ID,区分每次执行的会话日志
- classloader 原理分析
- 免费视频播放器videojs中文教程
- 多重比较校正中的一些概念
- Android把View转换成Bitmap
- 【设计模式】观察者模式
- CodeForces 802G Periodic RMQ Problem(线段树+分块思想)
- 学习资料网址
- openvswitch处理upcall过程分析
- KUDU - Cloudera开发的又一个Hadoop系存储系统
- 仿京东、淘宝商品详情中上滑tableView的cell与headerView之间的动画效果
- Semaphore使用
- 线段树基本操作(1)
- Spring AOP讲解