设计模式之观察者模式——猫抓老鼠2:
对猫抓老鼠1再次进行优化,降低代码复杂性,以及使用事件来对方法进行保护
代码优化:
将老鼠代码进行优化,将自己的方法在构造时便注册到猫里面:
using System;
using System.Collections.Generic;
using System.Text;
/// <summary>
/// 观察者设计模式——猫抓老鼠
/// </summary>
namespace Unity_Observe_mode
{
/// <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;
}
public void RunAway()
{
Console.WriteLine(color + "的老鼠" + name + "说:老猫来了,赶紧跑! ");
}
}
}
猫类代码添加事件:
这里添加事件后,用法与委托一样,主要目的是:防止被外界进行调用,只能在内部触发
using System;
using System.Collections.Generic;
using System.Text;
/// <summary>
/// 观察者设计模式——猫抓老鼠
/// </summary>
namespace Unity_Observe_mode
{
/// <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;//定义一个委托
//public void CatComing(Mouse mouse1,Mouse mouse2,Mouse mouse3)
//{
// Console.WriteLine(color + "的猫" + name + "过来了,喵喵喵!!");
// mouse1.RunAway();
// mouse2.RunAway();
// mouse3.RunAway();
//}
}
}
最后进行测试,得到结果:
至此设计模式——观察者模式完成。