首页 > 其他分享 >观察者模式-21

观察者模式-21

时间:2023-08-25 22:22:39浏览次数:30  
标签:21 Observer void 观察者 模式 update abstract public

概述

观察者模式(Observer Pattern)又称发布-订阅(Publish/Subscribe)模式、模型视图(Model/View)模式、源监听器(Source/Listener)模式、从属者(Dependents)模式。它定义了对象之间的一对多的关系,使得一个对象的状态发生改变时,会通知相关的其他对象并根据变化的状态更新这些对象。

优点:实现表示层和数据逻辑层的分离,符合“开闭原则”。
缺点:观察者只知道目标状态变化,不知道变化原因。观察者和目标之间不能出现循环依赖。同一个目标的观察者数量不能过多。

abstract class AbstractTarget {
  protected ArrayList<Observer> obs;
  
  abstract void attach(Obverser o);
  abstract void detach(Obverser o);
  abstract void notify();
}

class Target extends AbstractTarget {
  public void attach(Observer o) {
    obs.add(o);
  }
  
  public void detach(Observer o) {
    obs.remove(o);
  }
  
  public void notify() {
    for (Observer o : obs) {
      ob.update();
    }
  }
}

interface Observer {
  void update();
}

class ObserverA implements Observer {
  public void update() {
    // body
  }
}

class ObserverB implements Observer {
  public void update() {
    // body
  }
}

图示:
image

参考

[1] 刘伟, 设计模式, 2011.

标签:21,Observer,void,观察者,模式,update,abstract,public
From: https://www.cnblogs.com/xdreamc/p/16470483.html

相关文章

  • Dreamweaver2021设计DW2021下载安装 中文版直装
    Dreamweaver2021版是一款非常专业的网页设计工具,设计功能强大,集网页制作和网站管理于一体,强大的编辑器让您的工作更轻松!功能介绍:可视化界面:Dreamweaver提供了可视化界面,使得用户可以直接在界面上操作,无需编写代码。代码编辑器:Dreamweaver也提供了代码编辑器,方便用户编辑和调试代码......
  • 策略模式在项目设计中用得最多
    日常Coding过程中,设计模式三板斧:模版、构建者、策略,今天来说下第三板斧策略设计模式。策略模式还是比较简单并且使用较多的,平常我们多运用策略模式用来消除if-else、switch等多重判断的代码,消除if-else、switch多重判断可以有效应对代码的复杂性。如果分支判断会不断变化(......
  • 大型电商网站:第一章:主要电商模式
    七大电商模式B2B–企业对企业B2B(BusinesstoBusiness)是指进行电子商务交易的供需双方都是商家(或企业、公司),她(他)们使用了互联网的技术或各种商务网络平台,完成商务交易的过程。电子商务是现代B2Bmarketing的一种具体主要的表现形式。案例:阿里巴巴C2C–个人对个人C2C即Custo......
  • 业务架构模式的演进(单体架构、垂直架构、SOA架构、微服务架构)
    引子软件架构从最初的单体架构,到垂直架构,到SOA架构,再到现在流行的微服务架构,一直处在演进与发展中。演进的过程本质上是在不停的满足愈发复杂的业务需求,因此笔者更倾向称呼它们为“业务架构”。每一次架构的演进都是基于原有架构的特性再结合实际的业务场景而进行的改进,但这并不意......
  • Opengl图形几何变换的模式
    当我们对一个图形进行一个较为复杂的变换时,我们并不直接去计算这个变换,而是将其分解为多个基本变换,再依次作用于图形。对于复合变换:$$ P^{,}=M_{n}\cdotsM_{3}\bulletM_{2}\bulletM_{1}\bulletP$$先作用的变换放在连乘式右边,后作用的变换放在连乘式左边。由于矩阵乘......
  • 21.2048小游戏
    跟着教学视频来做,但是视频不完整的,还缺一部分,后面的是我自己独自完成的,嘿嘿嘿这是初步的作品,也就三百多行代码packagemyGame2048;publicclassStartGame_2048{publicstaticvoidmain(String[]args){newGameFrame_2048();}}packagemyGame2048;......
  • C++单例模式
    单例模式什么是单例模式:只能实例化一个类对象(全局有且只有一个类的static实例)使用场景:进程管理器、日志管理器、网站访问计数器、应用配置程序、线程池、服务器的连接管理器实现单例模式的原理/步骤1、禁止在类外随意实例化对象,把构造函数/拷贝构造都私有化private2、确保......
  • 华为数通方向HCIP-DataCom H12-821题库(单选题:261-280)
    第261题以下关于IPv6过渡技术的描述,正确的是哪些项?A、转换技术的原理是将IPv6的头部改写成IPv4的头部,或者将IPv4的头部改写成IPv6的头部B、使用隧道技术,能够将IPv4封装在IPv6隧道中实现互通,但是隧道的端点需要支持双栈技术C、转换技术适用于纯IPv4网络与纯IPv6网络之间的通信,方......
  • LeetCode-21. 合并两个有序链表(Java)
    这是我在51CTO博客开启的写作之路,第一次正式写博客记录我在LeetCode的刷题日,希望能帮助更多的小伙伴攻面自己心仪的公司offer。如下对于 LeetCode-21.合并两个有序链表,进行全面解析并小结解题思路,同学们请参考:1.题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表......
  • Java设计模式
    装饰器模式:装饰器模式是指在不改变现有对象结构的情况下,动态的给改对象增加一些职责(即增加其额外功能)的模式。装饰器模式通常在以下几种情况使用。当需要给一个现有类添加附加职责,而又不能采用生成子类的方法进行扩充时。例如,该类被隐藏或者该类是终极类或者采用继承方式会产生......