博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java设计模式案例详解:观察者模式
阅读量:6249 次
发布时间:2019-06-22

本文共 2795 字,大约阅读时间需要 9 分钟。

观察者模式的应用场景: 

1、 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变。 
2、 对象仅需要将自己的更新通知给其他对象而不需要知道其他对象的细节。

举个例子说明,这个例子讲述一个老大吩咐小弟做事的故事,只要老大一声令下小弟就开始工作,小弟成员可增减.根据模式定义,使用两个接口,多个实现

package main.java.com.learn.observer;/** * 干活接口,接到消息的类实现该接口干活,也就是观察者 * @author garfield * */public interface Worker {         void doSomeThing();}
package main.java.com.learn.observer;/** * 发号施令者,也就是被观察者 * Created by garfield on 2016/6/13. */public interface Mandator {    void addWorker(Worker worker);    void removeWorker(Worker worker);    void notifyWorker();}
package main.java.com.learn.observer.impl;import main.java.com.learn.observer.Mandator;import main.java.com.learn.observer.Worker;import java.util.ArrayList;import java.util.List;/** * 实现发号施令,方法有添加和开除小弟,并通知小弟做事 * Created by garfield on 2016/6/13. */public class MandatorImpl implements Mandator {    private List
workers = new ArrayList<>(); @Override public void addWorker(Worker worker) { workers.add(worker); } @Override public void removeWorker(Worker worker) { workers.remove(worker); } @Override public void notifyWorker() { for (Worker worker : workers) { worker.doSomeThing(); } }}
package main.java.com.learn.observer.impl;import main.java.com.learn.observer.Worker;/** * 实现工作接口,各个小弟工作内容不一样 * Created by garfield on 2016/6/13. */public class WorkImpl_1 implements Worker{    @Override    public void doSomeThing() {        System.out.println("端茶");    }}
package main.java.com.learn.observer.impl;import main.java.com.learn.observer.Worker;/** * 实现工作接口,各个小弟工作内容不一样 * Created by garfield on 2016/6/13. */public class WorkImpl_2 implements Worker{    @Override    public void doSomeThing() {        System.out.println("送水");    }}
package main.java.com.learn.observer.impl;import main.java.com.learn.observer.Worker;/** * 实现工作接口,各个小弟工作内容不一样 * Created by garfield on 2016/6/13. */public class WorkImpl_3 implements Worker{    @Override    public void doSomeThing() {        System.out.println("做饭");    }}

测试代码:

package main.java.com.learn.observer;import main.java.com.learn.observer.impl.MandatorImpl;import main.java.com.learn.observer.impl.WorkImpl_1;import main.java.com.learn.observer.impl.WorkImpl_2;import main.java.com.learn.observer.impl.WorkImpl_3;/** * Created by garfield on 2016/6/13. */public class ObserverTest {    public static void main(String[] args){        Mandator mandator = new MandatorImpl();        Worker worker1 = new WorkImpl_1();        Worker worker2 = new WorkImpl_2();        Worker worker3 = new WorkImpl_3();        mandator.addWorker(worker1);        mandator.addWorker(worker2);        mandator.addWorker(worker3);        mandator.notifyWorker();    }}

这样三个小弟就开始工作了.输出结果:

端茶送水做饭

  是不是清晰明了!

转载于:https://www.cnblogs.com/garfieldcgf/p/5580188.html

你可能感兴趣的文章
整形越界,死循环,产生莫名其妙的问题
查看>>
帝国cms支持的变量及灵动标签变量汇总
查看>>
【博客园客户端】博客园Android客户端更新:离线下载、本地收藏、RSS阅读
查看>>
here is the code for MJPG video capture on ip camera
查看>>
python urllib2 (转)
查看>>
[原]浅谈几种服务器端模型——反应堆模式(基于epoll的反应堆)
查看>>
关于 Content-Encoding: gzip - 知道创宇
查看>>
linux lftp命令
查看>>
跟JBPM学设计模式之工厂方法模式
查看>>
extern用法详解
查看>>
推荐几款软件界面模型设计工具
查看>>
存储过程传言
查看>>
JavaScript求当月天数
查看>>
ClipCursor与GetClipCursor 用法
查看>>
静态查找---->顺序、折半、分块查找
查看>>
经历无数次失败,终于把kamailio装上了
查看>>
Tsung 1.5.0 增加对 WebSocket 和 BOSH 的支持
查看>>
NYOJ-613 免费馅饼
查看>>
概率论07 联合分布
查看>>
虚拟机中克隆系统后网卡无法识别的解决办法
查看>>