Observer Pattern 模式

原创 2006年06月23日 13:52:00

结构

代码

using System;
using System.Collections;

namespace ExempleObserver
{
 /// <summary>
 /// Subject 的摘要说明。
 /// </summary>
 interface Subject
 {
  // Methods
  void Attach( Observer observer );
  void Detach( Observer observer );
  void Notify();
 }


 // "ConcreteSubject"
 class ConcreteSubject : Subject
 {
  // Fields
  private ArrayList observers = new ArrayList();

  // Methods
  public void Attach( Observer observer )
  {
   observers.Add( observer );
  }

  public void Detach( Observer observer )
  {
   observers.Remove( observer );
  }

  public void Notify()
  {
   foreach( Observer o in observers )
    o.Update();
  }

  // Fields
  private string subjectState;

  // Properties
  public string SubjectState
  {
   get{ return subjectState; }
   set{ subjectState = value; }
  }
 }


 // "Observer"
 interface Observer
 {
  // Methods
  void Update();
 }

 // "ConcreteObserver"
 class ConcreteObserver : Observer
 {
  // Fields
  private string name;
  private string observerState;
  private ConcreteSubject subject;

  // Constructors
  public ConcreteObserver( ConcreteSubject subject, string name )
  {
   this.subject = subject;
   this.name = name;
  }

  // Methods
  public void Update()
  {
   observerState = subject.SubjectState;
   Console.WriteLine( "Observer {0}'s new state is {1}", name, observerState );
  }

  // Properties
  public ConcreteSubject Subject
  {
   get { return subject; }
   set { subject = value; }
  }
 }

 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 class FormMain
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   //
   // TODO: 在此处添加代码以启动应用程序
   //

   // Configure Observer structure
   ConcreteSubject s = new ConcreteSubject();
   s.Attach( new ConcreteObserver( s, "1" ) );
   s.Attach( new ConcreteObserver( s, "2" ) );
   s.Attach( new ConcreteObserver( s, "3" ) );

   // Change subject and notify observers
   s.SubjectState = "ABC";
   s.Notify();
  }
 }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

观察者模式(Observer Pattern)(三):使用java内置的支持实现HeadFirst气象站

一、问题描述 Weather-O-Rama气象站计划建立下一代的Internet气象观察站,该气象站必须建立在WeatherData对象的基础上,WeatherData对象提供天气数据,有三...

观察者模式(Observer pattern)

观察者模式(Observer patten),定义了对象之间的一对多依赖,这样一来一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。       它在现实生活中也非常常见,如报纸、杂志的订阅...

观察者模式(Observer Pattern)升级版

简介前面的博客https://goo.gl/DFOz50中已经介绍过基本的观察者模式的代码实现,在实际应用中,我们往往希望代码更加简洁,同时也希望能与现有的框架,比如Spring,结合起来。下面介绍如...

观察者模式 | Observer Pattern

观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一...

观察者模式(Observer Pattern)

给出问题事例:有一个WeatherData对象可以给我们提供实时的天气情况(温度、湿度、气压),我们要做的就是一个应用,这个应用目前有三个布告板,分别显示目前的状况、气象统计以及简单的预报。这三个布告...

观察者模式(Observer Pattern)

观察者模式定义: Define a one-to-many dependency between objects so that when one object changes state , al...

观察者模式 Observer Pattern

之前总是想写一个程序,大体上是这样的:单服务器,多客户端。服务器上比如说是个房屋价格信息,客户端则是租房子,显示价格。如果现在有特价,怎么客户端怎么实时获取?而且作为客户端,用户定是不止一个,如何通知...

观察者模式(Observer Pattern)

观察者模式 观察者模式(又称发布/订阅模式)定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖它的对象都得到通知并自动更新。 观察者模式 概述概述  在许多设计中,经常涉及到多...

观察者模式(Observer Pattern)

1. 概述   有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 ...

2.观察者模式(Observer Pattern)

在观察者模式一章中,Head Fist一书主要是通过“气象台”的例子,来讲解优化代码,并将观察者模式自然而然的融入进去。 本例粗略介绍:有一个屌丝互联网公司赢得了一家气象台的合约,气象台要求如下:气...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)