一,什么是观察者模式(Observer Pattern)?

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象

二,代码如下:

在一开始我们先定义两个类,一个是Chinese类(被观察者) ,另一个是Jan类(观察者),观察者设计模式是当被观察者状态发生改变,从而触发观察者的事件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace _16.观察者模式
{
/// <summary>
/// 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象
/// </summary>
class Program
{
static void Main(string[] args)
{
Chinese ch = new Chinese("拿着棍子", "穿白色衣服的");
ch.AddObserver(new Jan("灰衣服"));
ch.AddObserver(new Jan("白衣服"));
ch.Coming(); //当中国人的状态发生改变,从而触发观察者绑定在中国人身上的事件(Coming) Console.ReadKey();
}
} /// <summary>
/// 观察者接口行为
/// </summary>
public interface IObserver
{
void Action();
} /// <summary>
/// 被观察者
/// </summary>
public class Chinese
{
private string name;
private string color; public Chinese(string name, string color)
{
this.name = name;
this.color = color;
}
/// <summary>
/// 观察者列表
/// </summary>
private List<IObserver> _ObserverList = new List<IObserver>(); #region 操作
public void AddObserver(IObserver observer)
{
this._ObserverList.Add(observer);
} public void RemoveObserver(IObserver observer)
{
this._ObserverList.Remove(observer);
} #endregion /// <summary>
/// 中国人过来(中国人的状态发生改变)(被观察者的状态发生改变)
/// 列表进行通知
/// </summary>
public void Coming()
{
Console.WriteLine(color + "的中国人" + name + "过来了 ...");
//一系列后续动作
foreach (var observer in this._ObserverList)
{
observer.Action();
}
}
} /// <summary>
/// 集体观察者
/// </summary>
class Jan : IObserver
{
private string color;
public Jan(string color)
{
this.color = color;
} public void Action()
{
Console.WriteLine(color + "的日本人说:赶紧跑");
}
}
}

三,观察者模式的核心是使用Action将观察者事件绑定到被观察者中,这样我们就可以通过观察者时间异步通知被观察者

C#设计模式:观察者模式(Observer Pattern)的更多相关文章

  1. 设计模式-观察者模式(Observer Pattern)

    观察者模式(Observer Pattern):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己. 观察者 ...

  2. 设计模式 - 观察者模式(Observer Pattern) 详细说明

    观察者模式(Observer Pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...

  3. 设计模式 - 观察者模式(Observer Pattern) 详细解释

    观察者模式(Observer Pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...

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

    观察者模式(Observer Pattern) Java内置 用法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26601659 ...

  5. C#设计模式——观察者模式(Observer Pattern)1

    一.概述在软件设计工作中会存在对象之间的依赖关系,当某一对象发生变化时,所有依赖它的对象都需要得到通知.如果设计的不好,很容易造成对象之间的耦合度太高,难以应对变化.使用观察者模式可以降低对象之间的依 ...

  6. C#设计模式——观察者模式(Observer Pattern)

    一.概述在软件设计工作中会存在对象之间的依赖关系,当某一对象发生变化时,所有依赖它的对象都需要得到通知.如果设计的不好,很容易造成对象之间的耦合度太高,难以应对变化.使用观察者模式可以降低对象之间的依 ...

  7. 23种设计模式--观察者模式-Observer Pattern

    一.观察者模式的介绍      观察者模式从字面的意思上理解,肯定有两个对象一个是观察者,另外一个是被观察者,观察者模式就是当被观察者发生改变得时候发送通知给观察者,当然这个观察者可以是多个对象,在项 ...

  8. 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)

    原文:乐在其中设计模式(C#) - 观察者模式(Observer Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 观察者模式(Observer Pattern) 作者:weba ...

  9. 二十四种设计模式:观察者模式(Observer Pattern)

    观察者模式(Observer Pattern) 介绍定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新. 示例有一个Message实体类,某些对象 ...

  10. java设计模式--观察者模式(Observer)

    java设计模式--观察者模式(Observer) java设计模式--观察者模式(Observer) 观察者模式的定义: 定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依赖于它的 ...

随机推荐

  1. 形象生动的SpringBoot和SpringMVC的区别

    spring boot只是一个配置工具,整合工具,辅助工具. springmvc是框架,项目中实际运行的代码 Spring 框架就像一个家族,有众多衍生产品例如 boot.security.jpa等等 ...

  2. 《TED演讲的秘密》:TED组织者总结的演讲技巧集锦。三星推荐。

    对演讲感兴趣的可以看看.对TED内容感兴趣的也可以翻翻,书中有不少作者认为演讲技巧比较经典(一般来说内容上也有特色)的TED演讲的二维码.三星推荐.http://t.cn/RvFStu7

  3. bootz to be continued

    dmesgcat /proc/interrupts cat /proc/meminfocat /proc/cpuinfo top bootz 0x10000000 0x12000000 0x11000 ...

  4. $NOIP2018$ 暴踩全场计划实施方案

    \(NOIP2018\) 暴踩全场计划实施方案 改完题辣!该更博辣!(这么激动干嘛反正又没人看) 我要取一个霸气的名字.于是就这样了.原本打算是暴踩yyb计划实施方案的(来啊互相伤害啊) 信心流选手就 ...

  5. wxpython总体

    人到夏天就特别懒 from math import * import wx def sin_fun(event): a=text_angle.GetValue() b=sin(radians(floa ...

  6. Spring---条件注解@Conditional

    1.概述 1.1.Spring4  提供了一个更通用的  基于条件的Bean的创建,即使用@Conditional注解: 1.2.案例 package com.an.config; import co ...

  7. Jenkins之配置GitHub-Webhook2

    什么是持续集成(Continuous integration) 提出者Martin Fowler本人对持续集成是这样定义的:持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每 ...

  8. 4412 GPIO初始化

    一.GPIO的初始化 • 在内核源码目录下使用命令“ls drivers/gpio/*.o”,可以看到“gpioexynos4”被编译进了内核.通过搜索*.o文件,可以知道内核编译内哪些文件.针对的看 ...

  9. basic play

    [root@wen ~]# w 19:01:27 up 1 day, 7:06, 3 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN ...

  10. python数据分析中常用的库

    Python是数据处理常用工具,可以处理数量级从几K至几T不等的数据,具有较高的开发效率和可维护性,还具有较强的通用性和跨平台性,这里就为大家分享几个不错的数据分析工具,需要的朋友可以参考下 Pyth ...