java设计模式之观察者模式
来源:互联网 发布:飞机上座率查询软件 编辑:程序博客网 时间:2024/06/05 14:21
1、观察者模式介绍:
涉及到被观察者和观察者,当被观察者的状态发生改变的时候,会通知观察者,观察者在接收到事件后做出响应。(你是被观察者,你老婆是观察者,如果你偷喝酒被发现了,你老婆就会打你。)
2、以员工请求老板加工资为例,来理解观察者模式。其中员工是被观察者,老板是观察者
员工的接口:
package observer;/** * 员工的接口 * * @author Administrator */public interface Subject{ public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyObservers();}
员工的实现类:
package observer;/** * 具体的员工 */import java.util.ArrayList;import java.util.List;public class ConcreteSubject implements Subject{ private final List<Observer> observers; private float temperature; public float getTemperature() { return temperature; } private void temperatureChanged() { // 开始通知 System.out.println("我是员工,我开始通知老板我要加工资"); this.notifyObservers(); } public void setTemperature(final float temperature) { this.temperature = temperature; System.out.println("我是员工,我想加工资"); this.temperatureChanged(); } public ConcreteSubject() { System.out.println("我是员工"); observers = new ArrayList<Observer>(); } @Override public void registerObserver(final Observer o) { observers.add(o); System.out.println("我是员工,我新增了一个老板"); } @Override public void removeObserver(final Observer o) { if (observers.indexOf(o) >= 0) { observers.remove(o); } } @Override public void notifyObservers() { System.out.println("我是员工,我开始问我的老板,我要加工资"); if (observers.isEmpty()) { System.out.println("=============你没有老板,加不了工资================="); } for (final Observer o : observers) { o.update(temperature); } }}
老板的接口:
package observer;/** * 老板的接口 * * @author Administrator */public interface Observer{ public void update(float temprature);}
老板的实现类:
package observer;/** * 老板 * * @author Administrator */public class ConcreteObserver implements Observer{ private float temperature; private final Subject subject; public ConcreteObserver(final Subject subject) { System.out.println("我是老板"); this.subject = subject; this.subject.registerObserver(this); } public float getTemperature() { return temperature; } public void setTemperature(final float temperature) { this.temperature = temperature; } @Override public void update(final float temperature) { this.temperature = temperature; System.out.println("我是老板,收到你加工资的请求,同意!"); }}
主程序:
package observer;public class Client{ public static void main(final String[] args) { // 创建了一个员工 final ConcreteSubject sb = new ConcreteSubject(); // 调用员工的set方法 sb.setTemperature((float)20.00); // 创建一个该老板管理的员工,向该老板的员工集合中添加该员工 final Observer o = new ConcreteObserver(sb); // 调用员工的setTemperature方法 sb.setTemperature((float)21.00); }}
运行结果如图:
阅读全文
0 0
- java设计模式之“观察者设计模式”
- Java设计模式之观察者设计模式
- 《java设计模式》之观察者设计模式
- Java设计模式之观察者
- Java设计模式之观察者
- Java设计模式之Observer(观察者)模式
- Java设计模式之Observer 观察者模式
- Java设计模式之Observer-观察者模式
- java 设计模式之二-观察者模式
- Java设计模式之观察者模式
- java设计模式之观察者模式
- java设计模式之观察者模式Observer
- java设计模式之观察者模式
- Java设计模式之观察者模式
- JAVA设计模式之观察者模式2
- java与设计模式之观察者模式
- Java--设计模式之观察者模式
- java设计模式之观察者模式
- 11.1
- 人工智能:传统智能手机时代的终结者
- 请求网络加载ListView Asynctack后台线程
- 微信小程序项目遇到的坑
- ABP官方文档(二十一)【数据过滤器】
- java设计模式之观察者模式
- 正则表达式某些元字符的理解,基于js
- 华展云-让展览更高效 2017第三届中国嘉兴国际集成吊顶产业博览会、国际集成家居暨顶墙集成博览会会刊(参展商名录) 展会名称: 2017年第3届中国(嘉兴)国际集成吊顶产业博览会暨国际集成家居博览
- 从github上使用GIT命令将代码下载到本地
- 【技术教程】SequoiaDB对接Kafka
- VS2017安装打包工具;MFC的使用
- idea中properties配置文件显示中文
- leetcode 88. Merge Sorted Array
- Android的消息机制