一,在一开始我们先定义两个类,一个是Cat类(被观察者) ,另一个是mouse类(观察者),观察者设计模式是当被观察者状态发生改变,从而触发观察者的事件
代码如下:
Cat类:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace GczDesign { /// <summary> /// 被观察者 猫 /// </summary> class Cat { private string name; private string color; public Cat(string name, string color) { this.name = name; this.color = color; } /// <summary> /// 猫进屋(猫的状态发生改变)(被观察者的状态发生改变) /// </summary> public void CatComing() { Console.WriteLine(color + "的猫" + name + "喵喵喵 ..."); if (catCome != null) catCome(); } public event Action catCome;//声明一个事件 发布了一个消息 } }
Mouse类:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace GczDesign { /// <summary> /// 观察者类:老鼠 /// </summary> class Mouse { private string name; private string color; public Mouse(string name, string color, Cat cat) { this.name = name; this.color = color; cat.catCome += this.RunAway;//把自身的逃跑方法 注册进 猫catCome事件里面 订阅消息 } /// <summary> /// 逃跑功能 /// </summary> public void RunAway() { Console.WriteLine(color + "的老鼠" + name + "说: 猫来, 赶紧跑"); } } }
执行事件:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace GczDesign { class Program { static void Main(string[] args) { Cat cat = new Cat("小白", "白色"); Mouse mouse1 = new Mouse("小灰", "灰色", cat); Mouse mouse4 = new Mouse("小黑", "黑色", cat); cat.CatComing(); //当猫的状态发生改变,从而触发观察者绑定在猫身上的事件(CatCome) Console.ReadKey(); } } }
从上得出的结果为:
原文:http://www.cnblogs.com/May-day/p/6367998.html