观察者模式:猫叫鼠跑人醒(C#)
本着菜鸟先飞的想法,决定把平时遇到的知识点记录下来,一来是加深理解,二来是方便以后自己查阅。当您看到我这篇文章的时候,觉得代码有哪里不足的地方,请多指教,谢谢。(命名不规范是为了加深自己的理解,多多见谅。)
观察者模式:即当目标对象状态或者是行为发生改变时,正在观察该目标对象的观察者们做出一系列自动反应。
.接口实现
public interface Oberver
{
void 坐出反应();
}
public interface BObserver
{
void 反应(Oberver o);
}
public class 老鼠 : Oberver
{
public 老鼠(BObserver b)
{
b.反应(this);
}
public void 坐出反应()
{
Console.WriteLine("老鼠跑了...");
}
}
public class 人 : Oberver
{
public 人(BObserver b)
{
b.反应(this);
}
public void 坐出反应()
{
Console.WriteLine("人醒了...");
}
}
public class 猫 : BObserver
{
List<Oberver> list;
public 猫()
{
list = new List<Oberver>();
}
public void 反应(Oberver o)
{
list.Add(o);
}
public void 猫叫()
{
foreach (Oberver o in list)
{
o.坐出反应();
}
}
.委托和事件
public delegate void 处理();
public abstract class 被观察
{
public event 处理 处理事件;
public void Test()
{
if (处理事件 != null) this.处理事件();
}
}
public class 猫 : 被观察
{
public void 猫叫()
{
Console.WriteLine("猫叫了!");
this.Test();
}
}
public abstract class 观察者2
{
public 观察者2(被观察 b)
{
b.处理事件 += new 处理(观察做出反应);
}
public abstract void 观察做出反应();
}
public class 老鼠 : 观察者2
{
public 老鼠(被观察 b) : base(b) { }
public override void 观察做出反应()
{
Console.WriteLine("老鼠跑了......");
}
}
public class 人 : 观察者2
{
public 人(被观察 b) : base(b) { }
public override void 观察做出反应()
{
Console.WriteLine("人醒了......");
}
}
第一次发帖感觉好乱,多多包含。—菜鸟先飞
观察者模式:猫叫鼠跑人醒(C#)的更多相关文章
- 面试习题之设计模式 C#观察者模式(猫叫老鼠惊走主人醒)
腾讯云测试|TEST Tencent Cloud /* * CatShout.cs */ using System; using System.IO; using System.Collections ...
- .NET委托和事件
.net学习之委托和事件 1.什么是委托 通俗的说:委托就是一个能够存储符合某种格式(方法签名)的方法的指针的容器 上传图片: 2.委托语法 准备一个方法:string Hello(string ...
- .net学习之委托和事件
1.什么是委托通俗的说:委托就是一个能够存储符合某种格式(方法签名)的方法的指针的容器上传图片: 2.委托语法准备一个方法:string Hello(string userName){} string ...
- C#事件委托概念
事件就是一个狭义的委托,也就是事件是一个用于事件驱动模型的专用委托. 通俗的讲,委托你可以在客户代码中直接调用委托来激发委托指向的函数,而事件不可以,事件的触发只能由服务代码自己触发 也就是说在你的代 ...
- Yii2之事件处理
通过事件(Event)处理,可以在某个特定时刻执行指定的代码,可以解耦代码,同时也增加了可维护性,通常,事件在客户端软件中比较好理解,比如onClick,onFocus,当点击按钮,获取到焦点时执行指 ...
- 老鼠跑猫叫主人惊醒c++观察者模式实现
这个题目算是比较经典的观察者模式了,老鼠作为一个Subject,主动发出跑的动作,紧跟着猫由于老鼠的跑而发出叫声,主人也被惊醒,在这里猫跟主人都是被动的,是观察者角色,代码实现如下: class CS ...
- 09观察者模式ObServer
一.什么是观察者模式 Observer模式是行为模式之一,它的作用是当 一个对象的状态发生变化时,能够自动通知其他 关联对象,自动刷新对象状态. Observer模式提供给关联对象一种同步通信的 手段 ...
- Chinese culture
文房四宝 笔墨纸砚是中国古代文人书房中必备的宝贝,被称为“文房四宝”.用笔墨书写绘画在 中国可追溯到五千年前.秦(前221---前206)时已用不同硬度的毛和竹管制笔:汉代(前206—公元220) ...
- 关于一个简单面试题(。net)
猫大叫一声,主人被惊醒,所有的小老鼠开始逃窜. 期初想到的是事件调用方法. 在猫叫的事件中调用一对方法就可以了. 但是,当事件很多的时候 难保大家写着写着就忘记了. 总不能有 10000个人的时候调用 ...
随机推荐
- Asp.Net Identity自定义user类的运用,ClaimsIdentity
mvc5自动生成的用户验证是比较好用的,还可以扩展,可是要求code first,目前使用sqlite,支持entity framework,但不支持code first. 只有自已简单模仿一下了.经 ...
- 关于ASP.NET 中站点地图sitemap 的使用
在ASP.NET MVC 如此火热的时期,我竟然不适时宜的谈起ASP.NET ,恐怕会引来一阵嘲笑.最为无趣的是,讲解的竟然还是其中的一个控件.oh~~ my god!my out! ^_^ Si ...
- XHR 框架与 Dojo( xhrGet,xhrPut,xhrDelete)
总结 本文介绍了 Dojo 中三种浏览器与服务器交互的方式,这三种方式各有优缺点,但是在使用方式却出奇的一致: xhr 框架的函数,dojo.io.iframe.dojo.io.script 对象的函 ...
- oracle几个函数整理 DECODE() NVL NVL2 NULLIF Coalesce(转)
DECODE() decode()函数简介: 主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明): 使用方法: Select decode(columnname,值1,翻译值1,值 ...
- stuts1:(Struts)Action类及其相关类
org.apache.struts.action.Action类是Struts的心脏,也是客户请求和业务操作间的桥梁.每个Action类通常设计为代替客户完成某种操作.一旦正确的Action实例确定, ...
- C++标准库之泛型算法
本文中算法都是指泛型算法. 基本要点: 1)算法使用迭代器进行操作. 2)不依赖容器,但容器希望使用算法,就必须提供接口. 3)通用算法永远不会执行容器操作.操作仅指:更改容器大小的操作.但,容器内部 ...
- DDD的"waiting until GDB gets ready"
运行DDD调试器时,出现卡死现象,看软件状态,发现"waiting until GDB gets ready",Google了这个问题,很多都是删除文件夹"~/.ddd& ...
- $ cd `dirname $0` 和PWD%/* shell变量的一些特殊用法
在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的.因为他返回当前路径的".". $0:当前Shell程序的文件名dirname $0,获取当前Shell程序 ...
- MySql5压缩包安装
一. 解压所有文件到一个目录:例如D:\Program Files\mysql-5.6.22-winx64 二. 配置系统的环境变量:在Path路径后追加:;D:\Program Files\mysq ...
- asp.net实现伪静态遇到的问题
之前在一次项目(asp.net网站)中要用到伪静态技术,实现的思路大致是这样的: 在全局配置文件Global.asax(普通的类可以通过实现IHttpModule来完成)中的Application_B ...