namespace ConsoleApplication1
{
interface IObserver
{
void ReceiveMsg(string msg);
}
class Observer : IObserver
{
string Key;
public Observer(string key)
{
this.Key = key;
}
public void ReceiveMsg(string msg)
{
Console.WriteLine("Observer-" + Key + " 收到消息:" + msg);
}
}
interface ISubject
{
void AddObserver(IObserver ob);
void DelObserver(IObserver ob);
void Notify(string msg);
}
class Subject : ISubject
{
List<IObserver> observerList = new List<IObserver>();
public void AddObserver(IObserver ob)
{
if (!observerList.Contains(ob))
observerList.Add(ob);
}
public void DelObserver(IObserver ob)
{
if (observerList.Contains(ob))
observerList.Remove (ob);
}

public void Notify(string msg)
{
foreach (IObserver ob in observerList)
{
ob.ReceiveMsg(msg);
}
}
}
class Child : Subject
{
public void Cry()
{
Notify("孩子哭了");
}
public void Smile()
{
Notify("孩子笑了");
}
}
class Program
{
static void Main(string[] args)
{
IObserver ob_father = new Observer("Father");
IObserver ob_mather = new Observer("Mather");
Child child = new Child();
child.AddObserver(ob_father);
child.AddObserver(ob_mather);
child.Cry();

Console.ReadLine();
Console.WriteLine("父亲外出国打工了..");
child.DelObserver(ob_father);
child.Smile();
Console.ReadLine();

}
}
}

设计模式-观察者模式(List列表维护观察者)的更多相关文章

  1. 【设计模式】Java设计模式 - 观察者模式

    [设计模式]Java设计模式 - 观察者模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 @一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长 ...

  2. [Head First设计模式]山西面馆中的设计模式——观察者模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也不得安生,也发现生活中的很多场景,都可以用设计模式来模拟.原来设计模式就在 ...

  3. c#设计模式-观察者模式

    Observer 与 Subject 互为耦合,但是这种耦合的双方都依赖于抽象,而不依赖于具体. 一.观察者模式 目的 我们都知道解决一个问题有N种解决方式,但在面向对象的设计中如何能做到“高内聚,低 ...

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

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

  5. Android设计模式-观察者模式

    原文地址 http://blog.csdn.net/qq_25806863/article/details/69218968 观察者模式是一种使用频率非常高的设计模式,最常用的地方就是订阅-发布系统. ...

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

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

  7. 18. 星际争霸之php设计模式--观察者模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  8. linkin大话设计模式--观察者模式

    linkin大话设计模式--观察者模式 观察者模式定义了对象间的一对多依赖关系,让一个或者多个观察者观察一个对象主题.当主题对象的状态发生改变的时候,系统能通知所有的依赖于此对象的观察者对象,从而能自 ...

  9. js设计模式-观察者模式

    定义: 观察者模式又叫发布订阅模式,它定义了对象间的一种一对多的依赖关系.观察者模式让两个对象松耦合地联系在一起,虽然不太清楚彼此的细节,但这不影响他们之间的互相通信. 思路 定义一个对象,在对象中实 ...

随机推荐

  1. C 语言学习的第 01 课:先来聊聊计算机吧

    各位同学,新学期,我就是你们的助教了.我的个人信息,你们的任课老师都已经介绍过了,所以我这里也就不再啰嗦.下面,来聊聊今天的话题:“先来谈谈计算机吧”. 想必看到这个题目,你们大家一定是不愿意点击进来 ...

  2. 作业成绩 final 20161124-1201 09:00

    final阶段,20161124-1201 09:00. 申诉截止时间 20161206 12:00,微信联系杨贵福. 凡描述需求或BUG时,应给出以下4项: 你期待看到的现象如何 你实际看到的现象 ...

  3. canvas边界与摩擦力

    处理物体超出画布时的三种基本状态,复位,移除,反弹 (1)检测是否越界的核心算法 if( object.x - object.width / 2 > right || object.x + ob ...

  4. iOS开发小技巧--计算label的Size的方法总结

    计算label的Size方法 sizeWithAttributes:方法 适用于不换行的情况,宽度不受限制的情况 /// 根据指定文本和字体计算尺寸 - (CGSize)sizeWithText:(N ...

  5. Jenkins_获取源码编译并启动服务(二)

    一.创建Maven项目   二.设置SVN信息   三.设置构建触发器   四.设置Maven命令   五.设置构建后发邮件信息(参考文章一) 六.设置构建后拷贝文件到远程机器并执行命令   来自为知 ...

  6. nginx.conf的events,http段一般固定配置

    nginx.conf的events,http段一般固定配置 user nobody nobody; #使用的用户可以按照实际情况修改 worker_processes ; #指定nginx开启的进程数 ...

  7. 95C

    跑dijiestra每个点的最短路径 #include<iostream> #include<Vector> #include<cstring> #include& ...

  8. sql-将一个表中的数导入另一个表中

    1.如果2张表的字段一致,并且希望插入全部数据 可以用这种方法: INSERT INTO 目标表 SELECT * FROM 来源表;例: insert into insertTest select ...

  9. while 循环 于 for循环语句

    while 循环 while 循环 while 条件: 如果条件是真的,就继续的循环 如果条件是假的,就停止循环 循环的意思就是让程序重复地执行某些语句,whiler循环就是循环结构的一种,当事先不知 ...

  10. 精通Web Analytics 2.0 (1) 引言

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 前言 我对这本书抱有一个简单的愿望,也许是崇高的目标:改变世界对线上事情作决策的方式. 长久以来,我们在线上的举动已经被准确的归 ...