我眼中的设计模式(2)
来源:互联网 发布:学完c语言 编辑:程序博客网 时间:2024/06/04 18:36
继续学习设计模式
观察者模式
定义:定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。
/** * 主题接口,所有的主题必须实现此接口 * * @author zhy * */ public interface Subject { /** * 注册一个观察着 * * @param observer */ public void registerObserver(Observer observer); /** * 移除一个观察者 * * @param observer */ public void removeObserver(Observer observer); /** * 通知所有的观察着 */ public void notifyObservers(); }
/** * @author zhy 所有的观察者需要实现此接口 */ public interface Observer { public void update(String msg); }
public class ObjectFor3D implements Subject { private List<Observer> observers = new ArrayList<Observer>(); /** * 3D彩票的号码 */ private String msg; @Override public void registerObserver(Observer observer) { observers.add(observer); } @Override public void removeObserver(Observer observer) { int index = observers.indexOf(observer); if (index >= 0) { observers.remove(index); } } @Override public void notifyObservers() { for (Observer observer : observers) { observer.update(msg); } } /** * 主题更新消息 * * @param msg */ public void setMsg(String msg) { this.msg = msg; notifyObservers(); } }
public class Observer1 implements Observer { private Subject subject; public Observer1(Subject subject) { this.subject = subject; subject.registerObserver(this); } @Override public void update(String msg) { System.out.println("observer1 得到 3D 号码 -->" + msg + ", 我要记下来。"); } }
public class Observer2 implements Observer { private Subject subject ; public Observer2(Subject subject) { this.subject = subject ; subject.registerObserver(this); } @Override public void update(String msg) { System.out.println("observer2 得到 3D 号码 -->" + msg + "我要告诉舍友们。"); } }
public class Test { public static void main(String[] args) { //模拟一个3D的服务号 ObjectFor3D subjectFor3d = new ObjectFor3D(); //客户1 Observer observer1 = new Observer1(subjectFor3d); Observer observer2 = new Observer2(subjectFor3d); subjectFor3d.setMsg("20140420的3D号码是:127" ); subjectFor3d.setMsg("20140421的3D号码是:333" ); } }
0 0
- 我眼中的设计模式(2)
- 我眼中的设计模式
- 我眼中的设计模式-适配器模式
- 我眼中的设计模式 ----策略模式
- 我眼中的设计模式(一)
- 我眼中的设计模式(二)
- 我眼中的设计模式(三)
- 我眼中的设计模式(3)
- 我眼中的设计模式(4)
- 我眼中的设计模式(5)
- 我眼中的设计模式(6)
- 我眼中的设计模式(7)
- 我眼中的设计模式(8)
- 我眼中的设计模式(9)
- 我眼中的设计模式(9)
- 我眼中的MVC设计模式
- 我眼中的“交互式设计”!
- 我眼中的敏捷设计
- 关于《四元数插值算法实现游戏角色平滑旋转》中的算法一些问题
- 乌龟大王亚特尔 Yertle the Turtle
- SDUT 3363 数据结构实验之图论七:驴友计划
- c++ 概念和定义
- Docker1.13.1在 Ubuntu 16.04 上的安装和配置
- 我眼中的设计模式(2)
- Java-日志
- std::runtime_error 异常传递失败
- 简单工厂模式(静态工厂方法(Static Factory Method)模式)
- 并查集代码总结
- 伙伴系统的概述
- LeetCode 3. Longest Substring Without Repeating Characters
- VMWare 安装 Eclipse
- 【event】tx:allocate ITL entry