【设计模式】观察者模式
来源:互联网 发布:腾讯云服务器开放端口 编辑:程序博客网 时间:2024/05/23 14:18
啥是观察者模式呐?
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。
总结:天网恢恢 不疏不漏
所谓道高一尺魔高一丈也就是这样,只要你有政策(动作),我必然有对策
实现方式(附图) 模拟不同的观察者对温度变化做出反应
被观察者类:Observable.java
package com.lagersoft.test;import java.util.ArrayList;import java.util.List;//被观察者public class Observable { private List<Observer> observers = new ArrayList<Observer>(); //温度状态 private int state; public int getState() { return state; } public void setState(int state) { this.state = state; notifyAllObservers(); } //添加一个观察者 public void attach(Observer observer){ observers.add(observer); } //通知所有订阅了当前被观察者的观察者 public void notifyAllObservers(){ for (Observer observer : observers) { observer.update(); } } }
观察者抽象类 Observer.java
package com.lagersoft.test;//观察者public abstract class Observer { //被观察的对象 protected Observable subject; public abstract void update();}
观察者实现类1 FirstObserver.java
package com.lagersoft.test;/** * 实现观察者1 * @author Administrator * */public class FirstObserver extends Observer{ //构造时 public FirstObserver(Observable subject){ this.subject = subject; this.subject.attach(this); } @Override public void update() { System.out.println( "First观察到温度变化: " + subject.getState()); }}
观察者实现类2 SecondObserver.java
package com.lagersoft.test;/** * 实现观察者2 * @author Administrator * */public class SecondObserver extends Observer{ public SecondObserver(Observable subject){ this.subject = subject; this.subject.attach(this); } @Override public void update() { if(subject.getState() > 12){ System.out.println( "Second感受到温度变化: " + subject.getState() + "热死了"); }else{ System.out.println( "Second感受到温度变化: " + subject.getState() + "这就很舒服了"); } }}
测试程序Main.java
package com.lagersoft.test;public class Main { public static void main(String[] args) { Observable subject = new Observable(); //构造观察者 new FirstObserver(subject); new SecondObserver(subject); System.out.println("当前温度: 15℃"); //被观察者载入温度 subject.setState(15); System.out.println("当前温度: 10℃"); //被观察者载入温度 subject.setState(10); }}
输出:
当前温度: 15℃
First观察到温度变化: 15
Second感受到温度变化: 15热死了
当前温度: 10℃
First观察到温度变化: 10
Second感受到温度变化: 10这就很舒服了
注意事项: 1、JAVA 中已经有了对观察者模式的支持类。 2、避免循环引用。 3、如果顺序执行,某一观察者错误会导致系统卡壳,一般采用异步方式。
1 0
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- 设计模式 观察者模式
- 设计模式-观察者模式
- 设计模式-【观察者模式】
- 设计模式-观察者模式
- 设计模式 -- 观察者模式
- 设计模式-观察者模式
- 【设计模式】观察者模式
- 设计模式- 观察者模式
- 设计模式- 观察者模式
- 设计模式--观察者模式
- 炼数成金《数据分析与SAS》课程
- 信息隐藏和局部化
- View的事件体系(一)
- 关于BT06蓝牙通信的实现
- 【OpenCV】人脸对齐landmark及位置姿态EstimateHeadPose(SDM)
- 【设计模式】观察者模式
- python读取读取配置文件信息操作代码
- 实时计算开发-Storm从入门到精通
- Linux下安装Git
- 记录程序运行的时间
- Kafka到Hdfs的数据Pipeline整理
- 一个老电工的困惑 企业领导不重视维修电工技术培养
- ANDROID CollapsingToolbarLayout
- hadoop之Kmeans数据挖掘算法实现