博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程模式之观察者模式(Observer)
阅读量:5282 次
发布时间:2019-06-14

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

观察者模式由四个角色组成:抽象主题角色,抽象观察者角色,具体主题角色,抽象观察者角色,具体观察者角色

抽象主题角色(Subject):把所有的观察者角色的引用保存在一个集合中,可以有任意数量的观察者。其提供一个接口,可以添加、删除观察者,并可以向登记过的观察者发送通知。

具体主题角色(Observer):实现了抽象主题角色提供的接口的一个具体类。

抽象观察者角色(ConcreteSubject):提供一个借口,以接收主题角色发送的通知。

具体观察者角色(ConcreteObserver):实现了抽象观察者角色提供的接口的一个具体类。

 

 类图

 

JAVA代码:

package com.observer;import java.util.ArrayList;import java.util.List;/** * 抽象主题角色,被观察 * @author hyp * */public interface Subject{    void addWatcher(Watcher watcher);    void removeWatcher(Watcher watcher);    void notify(String message);}/** * 抽象观察者角色,观察主题 * @author hyp * */public interface Watcher{    void update(String message);}/** * 具体主题角色 * @author hyp * */public class ConcreteSubject implements Subject{    private List
watchers = new ArrayList
(); @Override public void addWatcher(Watcher watcher) { watchers.add(watcher); } @Override public void removeWatcher(Watcher watcher) { watchers.remove(watcher); } @Override public void notify(String message) { for(Watcher w:watchers) { w.update(message); } }}/** * 具体观察者橘色 * @author hyp * */public class ConcreteWatcher implements Watcher{ @Override public void update(String message) { System.out.println(this.toString()+ ":" + message); }}/** * 测试观察者模式 * @author hyp * */public class Test{ public static void main(String[] args) { Subject subject= new ConcreteSubject(); Watcher watcher1 = new ConcreteWatcher(); Watcher watcher2 = new ConcreteWatcher(); Watcher watcher3 = new ConcreteWatcher(); Subject.addWatcher(watcher1);//添加观察者 Subject.addWatcher(watcher2); Subject.addWatcher(watcher3); Subject.notify("Hello");//通知所有观察者 Subject.removeWatcher(watcher1);//移除一个观察者 Subject.notify("bye~"); }}

 

 

转载于:https://www.cnblogs.com/justmehyp/p/6216120.html

你可能感兴趣的文章
用python & bat写软件安装脚本 + HM NIS Edit自动生成软件安装脚本
查看>>
pmd
查看>>
上传头像预览
查看>>
swift 汉字转拼音
查看>>
特征值和特征向量
查看>>
如何利用极致业务基础平台做一个通用企业ERP之十一销售出库单设计
查看>>
XManager与SecureCRT
查看>>
错误:readline/readline.h:没有那个文件或目录解决方法
查看>>
876. Middle of the Linked List - LeetCode
查看>>
打印沙漏形
查看>>
kickstart一键自动安装Linux系统
查看>>
实现求n个随机数和为sum的haskell程序
查看>>
ActiveMq
查看>>
tomcat启动后产生的日志
查看>>
ASP.NET Core Web Api之JWT(一)
查看>>
Java Security:Java加密框架(JCA)简要说明
查看>>
DLib库Base64编解码示例
查看>>
C++ algorithm算法库
查看>>
(转)LINQ to SQL语句
查看>>
Linux上搭建Elasticsearch服务器并同步数据库
查看>>