设计模式之Observer(观察者)模式

需求:

有一个报社,用户可以随时订阅报纸,也可以随时取消订阅。当每天的新闻来的时候,报社用邮递员投递给订阅了报纸的用户。订阅者有老人、小孩和青年。

 

分析:

报社相当于被观察的对象,用户相当于观察者,一旦新闻有更新,报社就通知所有观察者。

 

类图:

 

 

扩展:

 该类图使用的是“推”的方式将新闻推送给订阅者。还可以使用一种的“拉”的方式实现,在Update传递空参数,只是通知订阅者数据有更新,然后由订阅者自己去报社获取(GetNews)。这种方式实现起来更麻烦,但是更容易扩展,如果有一天订阅者需要的参数变化,只需要在报社类里面添加一个方法就好。

时间: 2024-10-08 09:04:27

设计模式之Observer(观察者)模式的相关文章

Java设计模式(五) Observer(观察者)模式及Tomcat引申

基本概念 Observer 观察者模式(Observer Pattern)又称为发布订阅模式(Publish/subscribe) 定义对象间的一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并且自动更新 根据单一职责原则,每个类的职责是单一的,我们可以通过触发机制,形成一个触发链,把各个单一的职责串联成真实世界中的复杂的逻辑关系. 观察者模式的角色分工(JDK中提供了抽象接口的定义): Subject被观察者: 抽象类型,定义被观察者必须实现的职责,动态地增加和

Observer(观察者)模式

在多个对象之间建立一对多的关系,以便当一个对象状态改变的时候,其他所有依赖于这个对象的对象都能得到通知,并被自动更新. 适用情况: 当一个抽象模型有两个方面,其中一个方面依赖于另一方面.将这二者封装在独立的对象中以使它们可以各自独立地改变和复用. 当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变. 当一个对象必须通知其它对象,而它又不能假定其它对象是谁. 调用setChanged()方法,触发继承自Observable类的Observers()方法将这次改变广播出去. no

Design Pattern - Observer 观察者设计模式

Spy on enemy. 使用这个模式可以根据某些事件自动更新. 设计思路: 1 设计一个基类,作为需要观察一个时间行为的接口类 2 设计一个观察者类,可以观察所有基类的衍生类, 这里使用set来保存这些需要更新的类. 一个事件相当于一个函数,事件发生(调用函数)同时自动调用需要更新的函数动作. #pragma once #include <iostream> #include <string> #include <set> #include <vector&g

观察者(Observer)模式 * 委托事件

观察者(Observer)模式:定义了一种一对多的依赖关系.让多个观察者对象同时监听某一个主题对象.   这个主题对象发生变化时会通知所有观察者对象,使他们字段更新自己 /* * 抽象主题(Subject)角色:主题角色把所有对观察考对象的引用保存在一个聚集里,每个主题都可以有任何数量的观察者. 抽象主题提供一个接口,可以增加和删除观察者对象,主题角色又叫做抽象被观察者(Observable)角色,一般用一个抽象类或者一个接口实现. * 抽象观察者(Observer)角色:为所有的具体观察者定义

设计模式大类--行为模式(上)

大概有10中行为模式,分为上中下三篇.一.Template(模板)描述:定义一些操作算法的骨架,将其实现延迟到其子类好处:扩展性强 例子:Java的抽象类本来就是Template模式,因此使用很普遍.而且很容易理解和使用,我们直接以示例开始: public abstract class Benchmark{ /** * 下面操作是我们希望在子类中完成 */ public abstract void benchmark(); /** * 重复执行benchmark次数 */ public fina

设计模式 - 观察者模式(Observer Pattern) Java内置 使用方法

观察者模式(Observer Pattern) Java内置 使用方法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26601659 观察者模式(observer pattern)详解, 参见: http://blog.csdn.net/caroline_wendy/article/details/26583157 Java内置的观察者模式, 是通过继承父类, 实现观察者模式的几个主要函数: Observerable(可被观

Java经典23种设计模式之行为型模式(三)

本文接着介绍11种行为型模式里的备忘录模式.观察者模式.状态模式. 一.备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态.还是比较好理解的. 1.Memento 备忘录存储原发器对象的内部状态,这个类就是要存储的对象的状态.状态需要多少个变量,在Memento里就写多少个变量. public class Memento { private String state; public Meme*to(String st

JavaScript设计模式一:工厂模式和构造器模式

转自:http://segmentfault.com/a/1190000002525792 什么是模式 前阵子准备期末考试,挺累也挺忙的,实在闲不得空来更新文章,今天和大家说说javascript中的设计模式. 首先呢,我们需要知道的是:模式是一种可复用的解决方案,而反模式呢就是针对某个问题的不良解决方案. js反模式常见例子 向setTimeout和setInterval传递字符串,而不是函数,这会触发eval()的内部使用. 在全局上下文中定义大量的变量污染全局命名空间 修改Object类的

设计模式学习05—原型模式

一.动机与定义 之前学习原型模式一直以为原型模式目的是为了方便的创建相同或相似对象,用复制对象的方式替换new的方式,还研究了深克隆和浅克隆.最近仔细看了GOF的设计模式,发现原型模式的本意并不仅仅是复制对象这么简单. 复制对象确实是一方面,当我们需要大量相似,甚至相同对象的时候,除了一个个的new之外,还可以根据一个原型,直接复制出更多的对象.但是如果把原型模式认为只是复制对象这么简单就错了. 创建型模式主要讲如何创建对象,通常包含何时创建,谁来创建,怎么创建等.GOF书里面写的意图是,用原型