定义对象之间的一种一对多依赖关系,使得每一个对象发生状态的变化时,其相关依赖对象皆得到通知并被自动更新,又称为发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependence)模式。

结构图

角色与理解

  • 观察者模式共分为四种角色:

    • Subject(目标类):被观察的对象,内部定义一个观察者集合,并提供管理方法,定义通知方法notify()。
    • ConcreteSubject(具体目标类):继承目标类,实现notify中具体的方法,可省略。
    • Observer(观察者):对目标类做出的变化进行反应,一般为接口,声明更新方法update()。
    • ConcreteObserver(具体观察者):继承观察者,一般持有指向具体目标类的引用,实现update方法,调用具体 目标类完成具体的业务操作。
  • 首先对目标类和观察者进行抽象以便后期对程序进行扩展,目标类持有观察者的引用,实现自身变化时对观察者更新方法的调用。

核心代码

• 目标类

public abstract class AbstractSubject {protected List<Observer> observers = new ArrayList<>();public void attach(Observer observer) {observers.add(observer);}public void detach(Observer observer) {observers.remove(observer);}public abstract void notify(Object args);
}
• 具体目标类
public class ConcreteSubject extends AbstractSubject {@Overridepublic void notify(Object args) {System.out.println("目标类更改了状态");for (Observer observer : this.observers) {observer.update();}}
}

• 观察类

public interface Observer {void update();
}

• 具体观察类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ConcreteObserver implements Observer {private String name;@Overridepublic void update() {System.out.println(this.name + "已更新");}
}

• 客户端

public class Client {public static void main(String[] args) {AbstractSubject as = new ConcreteSubject();as.attach(new ConcreteObserver("观察者A"));as.attach(new ConcreteObserver("观察者B"));as.attach(new ConcreteObserver("观察者C"));as.notify("");}
}

设计模式-行为型

  • 设计模式行为型:解释器模式
  • 设计模式行为型:责任链模式
  • 设计模式行为型:命令模式
  • 设计模式行为型:备忘录模式
  • ​设计模式行为型:中介模式

c++ 设计模式_设计模式行为型:观察者模式(ObserverPattern)相关推荐

  1. 模板设计模式_设计模式-模板方法模式

    一.模板方法模式的定义 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计 ...

  2. 策略设计模式_设计模式之策略者模式

    策略者模式简介 策略者模式定义一个算法接口,并由其实现类去实现,使得每一个算法都得到封装,并让他们可以相互替换.这是一种行为型模式.策略者模式降低了算法行为和环境角色的耦合度,使得算法可以独立发生变化 ...

  3. 模板设计模式_设计模式实用又简单的模板模式

    这篇文章纯科普向,如题,对这方面了解的可以绕道了,不耽误大家时间了哈 -----------------------------------人工分割线------------------------- ...

  4. 状态模式 设计模式_设计模式:状态

    状态模式 设计模式 本文将介绍状态设计模式 . 它是行为设计模式之一 . 您无需了解许多理论即可了解模式的主要概念. 该文章将分为几个部分,在其中我将提供有关需要应用该模式的情况,它所具有的利弊以及用 ...

  5. 工厂设计模式和策略设计模式_设计模式:策略

    工厂设计模式和策略设计模式 这次我想谈谈策略设计模式 . 通过这种方式,我开始撰写有关行为设计模式的文章. 这种模式表示对象之间的某些交互模式,以使代码更灵活且组织得更好.此方法的最本质点是对象之间的 ...

  6. php设计模式原型模式,原型模式_设计模式_设计模式之原型模式 - Lane Blog

    10 8 Clicks: 6614 Date: 2014-04-21 21:48:35 Power By 李轩Lane 原型模式提取重复功能,避免了程序员喜欢复制粘贴的坏习惯.设计模式中的原型模式就是 ...

  7. 状态机设计模式_设计模式-代理/状态机模式

    代理模式 是使率非常高的模式: 为其它对象提供一种代理以控制这个对象的访问.该模式也称为委托模式,在使用的时候代理模式可以为我们提供非常好的访问控制. 如下代码 interface IGamePlay ...

  8. 策略设计模式_设计模式之 策略模式

    设计模式的出现好像都是为了解决一个问题----表现和行为分离. 策略模式的定义 封装一系列的方法,在合适的条件下,调用相应的方法. 策略模式的代码表现 假设我们要计算某些指标 var cateInde ...

  9. 策略设计模式_设计模式之策略模式总结

    再上一篇文章<设计模式之策略模式>中,我们通过模拟鸭子项目,了解了什么是策略模式,怎么使用策略模式.本文将通过鸭子项目的学习,对策略模式进行总结. 策略模式: 分别封装行为接口,实现算法族 ...

最新文章

  1. np.squeeze()函数
  2. 【Java 虚拟机原理】垃圾回收算法 ( 设置 JVM 命令参数输出 GC 日志 | GC 日志输出示例 | GC 日志分析 )
  3. 确定不收藏?机器学习必备的分类损失函数速查手册
  4. 【计算机图形学】实验:VB.net环境下的综合绘图与交互技术案例教程
  5. SQL Server 2000 JDBC驱动的完整安装及测试说明
  6. docker访问宿主机mysql_docker容器内访问宿主机127.0.0.1服务
  7. C语言 项目练习-家庭收支软件
  8. linux/npm/git的简单操作
  9. Android 系统(43)---HTTPS
  10. 京东:所有湖北员工按时发工资 工作岗位一直保留
  11. C语言小知识---printf()函数
  12. 团体程序设计天梯赛-练习集-L1-036. A乘以B
  13. Linux磁盘管理实战
  14. 【Android UI设计与开发】10:滑动菜单栏(二)SlidingMenu 动画效果的实现
  15. python中pandas库里的read_table和read_csv的区别
  16. 企业信用评分卡模型实战(python,附代码)
  17. pytorch下载加载mnist数据集
  18. QT中关于书签的操作
  19. mht转html保留图片,【JAVA】mht文件转html
  20. 预装Vista的HP华硕笔记本如何安装WinXP

热门文章

  1. FBI树-数据结构(二叉树)
  2. 理解SQL【转http://blog.jobbole.com/55086/】
  3. SPOJ LCS 后缀自动机
  4. 调用newtonsoft.json反序列出错
  5. Java并发——Java与多线程
  6. vuejs 和 element 搭建的一个后台管理界面
  7. ezmorph-1.0.6.jar的作用
  8. beginnersbook 数据库教程
  9. 安卓应用安全指南 4.4.2 创建/使用服务 规则书
  10. 飞龙的安卓逆向系列教程