C#观察者设计模式
本文提供全流程,中文翻译。
Chinar 坚持将简单的生活方式,带给世人!
(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)
|
Chinar —— 心分享、心创新!
助力快速理解 观察者设计模式
为新手节省宝贵的时间,避免采坑!
|
Chinar 教程效果:
刑警警察叔叔注视了一下四周
穿黑色衣服的:神偷 - 跑了
穿白色衣服的:笨贼 - 跑了
穿平常色衣服的:平民 - 跑了
穿红色衣服的:强盗 - 跑了
全文高清图片,点击即可放大观看 (很多人竟然不知道)
Police —— 警察类
这个类用来表示警察
当警察看向四周的时候,所有事件下的订阅者,都会被调用到
也可以理解为广播:当警察看向四周,所有小偷都接收到了广播
class Police
{
private string type;
private string name;
public event Action PoliceLook;
public Police(string type, string name)
{
this.type = type;
this.name = name;
}
public void LookAt()
{
Console.WriteLine(type + name + "注视了一下四周");
if (PoliceLook != null)
{
PoliceLook();
}
}
2
Thief —— 小偷
这个类用来表示小偷,具备基本属性名字、颜色、逃跑功能
那什么时候逃跑呢??就是当警察看向四周的时候逃跑
就是让所有小偷、订阅警察看向四周的事件,从而达到设计目的
class Thief
{
private string name;
private string color;
public Thief(string name, string color, Police police)
{
this.name = name;
this.color = color;
police.PoliceLook += Run;
}
public void Run()
{
Console.WriteLine("穿" + color + "衣服的:" + name + " - 跑了");
}
}
3
Main —— 主入口
这个类用来测试、打印输出结果
直观的表示事件变动
这个观察者设计模式很简单,直观的即可明白事件、委托是怎样传递信息的
class Program
{
static void Main(string[] args)
{
Police police = new Police("刑警", "警察叔叔");
Thief thief1 = new Thief("神偷", "黑色", police);
Thief thief2 = new Thief("笨贼", "白色", police);
Thief thief3 = new Thief("平民", "平常色", police);
Thief thief4 = new Thief("强盗", "红色", police);
police.LookAt();
Console.ReadLine();
}
}
4
Console —— 控制台输出
F5控制台输出结果
会发现,只有当 police.LookAt() 被调用的时候,小偷才跑
否则,小偷都没有任何动作
简单的一个小例子,可直观的看出事件/委托是如何传递不同类之间的调用关系
刑警警察叔叔注视了一下四周
穿黑色衣服的:神偷 - 跑了
穿白色衣服的:笨贼 - 跑了
穿平常色衣服的:平民 - 跑了
穿红色衣服的:强盗 - 跑了
支持
May Be —— 搞开发,总有一天要做的事!
拥有自己的服务器,无需再找攻略!
Chinar 提供一站式教程,闭眼式创建!
为新手节省宝贵时间,避免采坑!
|
先点击领取 —— 阿里全产品优惠券 (享受最低优惠)
1 —— 云服务器超全购买流程 (新手必备!)
2 —— 阿里ECS云服务器自定义配置 - 购买教程(新手必备!)
3—— Windows 服务器配置、运行、建站一条龙 !
4 —— Linux 服务器配置、运行、建站一条龙 !
Chinar
END
本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究
对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: [email protected]
对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址
|
请发表评论