标签:ati 多少 rgs 方法 场景 接口 需要 class 内容
1、观察者模式简介
1.1定义
有时候也叫 发布/订阅模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
? 观察者模式在被观察者和观察者之间建立了一个抽象的耦合,被观察者并不知道任何一个具体的观察者,只是保存着抽象观察者的列表,每个具体观察者都符合一个抽象观察者的接口。
1.2 适用环境
当一个对象改变需要同时改变多个其他对象,而且他不知道具体有多少对象需要改变的时候,应该考虑使用观察者模式。
实现方法不止一种,但这里仅写出event的实现方法
要用事件来实现,之所以不用委托实现观察者模式,是因为
class Cat //被观察者的类
{
private string catName;
private string catColor { get; set; }
public Cat(string name, string color)
{
this.catName = name;
catColor = color;
}
public delegate void CatShoutEventHandler();//1
public event CatShoutEventHandler CatShoutEvent;//2
public void CatShout()//猫叫
{
Console.WriteLine(catColor+" 的猫 "+catName+" 过来了,喵!喵!喵!\n");
//猫叫时触发事件
//猫叫时,如果CatShoutEvent中有登记事件(或者说是有订阅者),则执行该事件
if (CatShoutEvent != null)
CatShoutEvent();//被观察者行动(猫叫)之后,调用该事件,使观察者产生反应;
}
}
class Mouse//观察者的类
{
private string mouseName;
private string mouseColor { get; set; }
public Mouse(string name, string color)
{
this.mouseName = name;
this.mouseColor = color;
}
public void MouseRun()//观察者的行动
{
Console.WriteLine(mouseColor + " 的老鼠 " + mouseName + " 说:\"老猫来了,快跑!\" \n我跑!!\n我使劲跑!!\n我加速使劲跑!!!\n");
}
}
////////////////////////////////////////
class program
{
static void Main(string[] args)
{
Console.WriteLine("[场景说明]: 一个月明星稀的午夜,有两只老鼠在偷油吃\n
一只黑猫蹑手蹑脚的走了过来\n");
Mouse Jerry = new Mouse("Jerry", "白色");
Tom.CatShoutEvent += new Cat.CatShoutEventHandler(Jerry.MouseRun);//登记or注册(事件的实例+=方法的引用)//可写成 Tom.CatShoutEvent +=Jerry.MouseRun;
Mouse Jack = new Mouse("Jack", "黄色");
Cat Tom = new Cat("Tom", "黑色");//实例化了才有事件的存在
Console.WriteLine("[场景说明]: 为了安全的偷油,登记了一个猫叫的事件\n");
Tom.CatShoutEvent += new Cat.CatShoutEventHandler(Jerry.MouseRun);//登记or注册(事件的实例+=方法的引用)//可写成 Tom.CatShoutEvent +=Jerry.MouseRun;
Tom.CatShoutEvent += new Cat.CatShoutEventHandler(Jack.MouseRun);
Tom.CatShout(); //猫叫了!然后老鼠跑了
}
}
------------恢复内容结束------------
标签:ati 多少 rgs 方法 场景 接口 需要 class 内容
原文地址:https://www.cnblogs.com/laodada/p/12787486.html