行为型设计模式之观察者模式

结构
意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。
适用性
  • 当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。
  • 当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。
  • 当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的。

  1  using System;
  2     using System.Collections;
  3
  4     class Subject
  5     {
  6         private ArrayList list = new ArrayList();
  7
  8         private string strImportantSubjectData = "Initial";
  9
 10         public string ImportantSubjectData
 11         {
 12             get
 13             {
 14                 return strImportantSubjectData;
 15             }
 16             set
 17             {
 18                 strImportantSubjectData = value;
 19             }
 20         }
 21
 22         public void Attach(Observer o)
 23         {
 24             list.Add(o);
 25             o.ObservedSubject = this;
 26         }
 27
 28         public void Detach(Observer o)
 29         {
 30
 31         }
 32
 33         public void Notify()
 34         {
 35             foreach (Observer o in list)
 36             {
 37                 o.Update();
 38             }
 39         }
 40     }
 41
 42     class ConcreteSubject : Subject
 43     {
 44         public void GetState()
 45         {
 46
 47         }
 48
 49         public void SetState()
 50         {
 51
 52         }
 53     }
 54
 55     abstract class Observer
 56     {
 57         protected Subject s;
 58         public Subject ObservedSubject
 59         {
 60             get
 61             {
 62                 return s;
 63             }
 64             set
 65             {
 66                 s = value;
 67             }
 68         }
 69         abstract public void Update();
 70     }
 71
 72     class ConcreteObserver : Observer
 73     {
 74         private string observerName;
 75
 76         public ConcreteObserver(string name)
 77         {
 78             observerName = name;
 79         }
 80
 81         override public void Update()
 82         {
 83             Console.WriteLine("In Observer {0}: data from subject = {1}",
 84                 observerName, s.ImportantSubjectData);
 85         }
 86     }
 87
 88     /// <summary>
 89     ///    Summary description for Client.
 90     /// </summary>
 91     public class Client
 92     {
 93         public static int Main(string[] args)
 94         {
 95             // Set up everything
 96             ConcreteSubject s = new ConcreteSubject();
 97             ConcreteObserver o1 = new ConcreteObserver("first observer");
 98             ConcreteObserver o2 = new ConcreteObserver("second observer");
 99
100             s.Attach(o1);
101             s.Attach(o2);
102
103             // make changes to subject
104             s. ImportantSubjectData = "This is important subject data";
105
106             // Notify all observers
107             s.Notify();
108             return 0;
109         }
110     }

观察者模式

时间: 2024-12-17 16:13:08

行为型设计模式之观察者模式的相关文章

面向对象程序设计(OOP设计模式)-行为型模式之观察者模式的应用与实现

课程名称:程序设计方法学 实验5:OOP设计模式-行为型模式的应用与实现 时间:2015年12月02日三,第3.4节地点:理1 一.实验目的 加深对行为型设计模式的理解以及在开发中的实际应用能力. 二.实验内容 实验内容: 在工业自动化系统中,作为监控端,要求能够实时采集生产线上每一个测点的数据,并根据事先设定好的条件来发出告警.目前,系统可以支持的告警方式在形式上呈现多样化的趋势,主要包括屏幕显示告警.语音发声告警.电话拨号告警.电子邮件告警.手机短信告警以及其他可利用的告警方式等.在设置监控

一、创建型设计模式

包括简单工厂.工厂方法.抽象工厂.建造者.原型和单例模式. 1)简单工厂 又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例. 两种实现方式,第一种是通过类实例化对象创建,第二种是创建一个新对象然后包装增强其属性和功能. demo代码. 2)工厂方法 通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例. 将工厂方法看作是一个实例化对象的工厂类. demo代码. 3)抽象工厂 通过对类的工厂抽象使其业务用于对产品类簇的创建,而不负责创建某一类产品的实例. 用它作为父类来创建一

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

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

创建型设计模式总结(二)

上篇文章我们介绍了创建型设计模式的前三种:简单工厂模式.工厂方法模式和抽象工厂模式.这一篇文章,我们系统介绍一下其他的三种创建型设计模式:创建者模式.原型模式和单例模式. 一.创建者模式 创建者模式又叫建造者模式,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象. 创建者模式通常包括如下几种角色: 1.建造者角色(Builder) 对复杂对象的

【设计模式】观察者模式

生活中,当某件事发生时,应该通知所有的相关者.例如,上课地点有变,要通知所有学习这门课的同学. 在软件设计中,当一个对象的状态发生变化是,如何通知与它相关的所有对象,就是我们今天要谈到的观察者模式. 观察者模式 概述 定义了一种一对多的依赖关系.让多个观察者对象同事监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有的观察者对象,使它们能够自动更新自己. 实际上,观察者模式所做的工作就是在解除耦合.让耦合的双方都依赖于抽象,而不是依赖于具体.从而使得各自的变化都不会影响另一边的变化. 结

设计模式:观察者模式

设计模式:观察者模式 : http://www.cnblogs.com/li-peng/archive/2013/02/04/2892116.html 观察者模式是我们经常用的一个模式,比如在用wcf做服务的时候通知客户端做一些操作一般用设计者模式. 今天做一个订报纸的小例子来理解一下观察者模式  出版者+订阅者=观察者模式 用下边的图来说就是    人民日报+订阅者=观察者模式 只要是订阅了人民日报的人,有了新报纸就会送到订阅者那里去, 当你不想订的时候取消就不订阅就不会再收到报纸了. //报

设计模式之-观察者模式

该文代码来自设计模式之惮一书. 观察者模式定义: 观察者模式也叫做发布订阅模式. 观察者模式中的角色: 1.被观察者 被观察者职责为管理观察者并通知观察者. 2.观察者 对接受到的消息进行处理. /// <summary> /// 被观察者 /// </summary> public abstract class Subject { /// <summary> /// 观察者集合 /// </summary> private List<IObserva

设计模式(16) 观察者模式(OBSERVER)C++实现

意图: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 动机: 将一个系统设计成一系列相互协作的类有一个常见的副作用:需要维护相关对象之间的一致性. 观察者模式定义一种交互,即发布-订阅: 一个对象当自身状态发生改变时,会发出通知,但是并不知道谁是他的接收者,但每个接收者都会接收到通知,这些接受者称为观察者. 作为对通知的响应,每个观察者都将查询目标状态,然后改变自身的状态以和目标状态进行同步. 使用场景: 使对象封装为独立的改变和使用:

python设计模式之观察者模式

观察者模式 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern).比如,当一个对象被修改时,则会自动通知它的依赖对象.观察者模式属于行为型模式. 观察者模式在状态检测和事件处理等场景中是非常有用的.这种模式确保一个核心对象可以由一组未知并可能正在扩展的“观察者”对象来监控.一旦核心对象的某个值发生变化,它通过调用update()函数让所有观察者对象知道情况发生了变化.各个观察者在核心对象发生变化时,有可能会负责处理不同的任务:核心对象不知道也不关心这些任务是什么,通常观