观察者设计模式
来源:互联网 发布:网络侵犯名誉权案例 编辑:程序博客网 时间:2024/04/28 14:43
观察者是 JDK中使用最多的模式之一。他可以做到消息的订阅和传递。
比如现在现实生活中的牛奶公司 他的模式就是一个观察者模式,只要你是他们的订户你就会收到牛奶。这个时候牛奶公司就是发布者 订户就是观察者。订户可以取消订阅。具体的代码实现
先定义 2个接口
观察者类 SubJect ,订阅者类Observer
/** * 观察者模式 * @author Administrator * */public interface SubJect {/** * 订阅牛奶 */void registerObserver(Observer observer); /** * 取消订阅 */void unRegisterObserver(Observer observer);/** * 派送牛奶 */void notifyObserver(Milk milk);}
/** * 订户 * @author Administrator * */public interface Observer {void receive(Milk milk);}
再实现具体的类
import java.util.HashSet;import java.util.Set;/** * 牛奶公司 * @author Administrator * */public class MilkCompany implements SubJect{private Set<Observer> obs;public MilkCompany(){obs=new HashSet<Observer>();}public void registerObserver(Observer observer) {obs.add(observer);}public void unRegisterObserver(Observer observer) {obs.remove(observer);}public void notifyObserver(Milk milk) {for (Observer ob : obs) { ob.receive(milk);}}}
/** * 订户 * @author Administrator * */public class Subscriber implements Observer{private String name; public Subscriber(String name) { this.name=name; }public void receive(Milk milk) {System.out.println("接受到牛奶"+name);}}
main
import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class Test {/** * @param args */public static void main(String[] args) { MilkCompany milkCompany=new MilkCompany(); Subscriber ss= new Subscriber("张三"); milkCompany.registerObserver(ss); milkCompany.registerObserver(new Subscriber("李四")); milkCompany.registerObserver(new Subscriber("王五")); Milk milk=new Milk();milk.setName("xxx"); milkCompany.notifyObserver(milk);}}运行结果
接受到牛奶张三
接受到牛奶李四
接受到牛奶王五
总结:
二对象之间松耦合,但是它们任然可以实现交互,不清楚彼此的细节,观察者模式提供了一种对象设计 让发布者和订阅者之间松耦合。
0 0
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- 设计模式 观察者模式
- 设计模式-观察者模式
- 设计模式-【观察者模式】
- 设计模式-观察者模式
- 设计模式 -- 观察者模式
- 设计模式-观察者模式
- 【设计模式】观察者模式
- 设计模式- 观察者模式
- 设计模式- 观察者模式
- 设计模式--观察者模式
- 同样的错误不能犯两次(十):转移话题要察觉
- 解密SparkStreaming运行机制和架构(第二篇)
- java Filter__五个有用的过滤器(三)
- 第一章:开启启程你的第一行代码
- Android adb的常用命令略解
- 观察者设计模式
- iOS项目的目录结构和开发流程
- 在Visual Studio 2015中使用Grunt、Bowe
- LeetCode 219. Contains Duplicate II(检查重复)
- PHP自学no00002标记风格
- 上下滑动可以调节屏幕亮度
- Android 判断应用是否在运行
- 数据结构与算法:C++实现插入排序
- [综合]visio2013安装提示找不到Office.zh_cn\officeMUI.mis officemui.xml