转---猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒 [观察者模式]
程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
要求:
1.要有联动性,老鼠和主人的行为是被动的。
2.考虑可扩展性,猫的叫声可能引起其他联动效应。
要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象
评分标准: <1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)
<2>从Mouse和Master中提取抽象(5分)
<3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)
2 {
3 void Response(); //观察者的响应,如是老鼠见到猫的反映
4 }
5 public interface Subject
6 {
7 void AimAt(Observer obs); //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
8 }
9 public class Mouse : Observer
10 {
11 private string name;
12 public Mouse(string name, Subject subj)
13 {
14 this.name = name;
15 subj.AimAt(this);
16 }
17
18 public void Response()
19 {
20 Console.WriteLine(name + " attempt to escape!");
21 }
22 }
23 public class Master : Observer
24 {
25 public Master(Subject subj)
26 {
27 subj.AimAt(this);
28 }
29
30 public void Response()
31 {
32 Console.WriteLine("Host waken!");
33 }
34 }
35
36 public class Cat : Subject
37 {
38 private ArrayList observers;
39 public Cat()
40 {
41 this.observers = new ArrayList();
42 }
43 public void AimAt(Observer obs)
44 {
45 this.observers.Add(obs);
46 }
47 public void Cry()
48 {
49 Console.WriteLine("Cat cryed!");
50 foreach (Observer obs in this.observers)
51 {
52 obs.Response();
53 }
54 }
55 }
56 class MainClass
57 {
58 static void Main(string[] args)
59 {
60 Cat cat = new Cat();
61 Mouse mouse1 = new Mouse("mouse1", cat);
62 Mouse mouse2 = new Mouse("mouse2", cat);
63 Master master = new Master(cat);
64 cat.Cry();
65 }
66 }
67
68
69 //---------------------------------------------------------------------------------------------
70
71 设计方法二: 使用event -- delegate设计..
72 public delegate void SubEventHandler();
73 public abstract class Subject
74 {
75 public event SubEventHandler SubEvent;
76 protected void FireAway()
77 {
78 if (this.SubEvent != null)
79 this.SubEvent();
80 }
81 }
82 public class Cat : Subject
83 {
84 public void Cry()
85 {
86 Console.WriteLine("cat cryed.");
87 this.FireAway();
88 }
89 }
90 public abstract class Observer
91 {
92 public Observer(Subject sub)
93 {
94 sub.SubEvent += new SubEventHandler(Response);
95 }
96 public abstract void Response();
97 }
98 public class Mouse : Observer
99 {
100 private string name;
101 public Mouse(string name, Subject sub) : base(sub)
102 {
103 this.name = name;
104 }
105 public override void Response()
106 {
107 Console.WriteLine(name + " attempt to escape!");
108 }
109 }
110 public class Master : Observer
111 {
112 public Master(Subject sub) : base(sub){}
113 public override void Response()
114 {
115 Console.WriteLine("host waken");
116 }
117 }
118 class Class1
119 {
120 static void Main(string[] args)
121 {
122 Cat cat = new Cat();
123 Mouse mouse1 = new Mouse("mouse1", cat);
124 Mouse mouse2 = new Mouse("mouse2", cat);
125 Master master = new Master(cat);
126 cat.Cry();
127 }
128
129 }
130
转载于:https://www.cnblogs.com/EasyLive2006/archive/2007/04/28/730805.html
转---猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒 [观察者模式]相关推荐
- 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒
程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒.(C#语言) 要求: 1.要有联动性,老鼠和主人的行为是被动的. 2.考虑可扩展性,猫的叫声可能引起其他联动效应. 要点:1. 联动效果, ...
- java猫大叫一声_猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒 | 学步园
程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒.(C#语言) 要求: 1.要有联动性,老鼠和主人的行为是被动的. 2.考虑可扩展性,猫的叫声可能引起其他联动效应. 要点:1. 联动效果,运行 ...
- java猫大叫一声_为什么我的猫一直叫着呢?
原标题:为什么我的猫一直叫着呢? 猫咪一直叫时,可能正在向你传递以下信号. 1.意味着您的猫处于高温状态 如果您的5或6个月大的奶猫不断叫,说明您的猫可能很热.闷热中的猫发出异常响亮的声音,这种声音几 ...
- 一道面试题:猫大叫了一声...
今天在博客园上看到一道面试题,是关于委托和事件的,为了重温事件的应用,自己又做了一遍. 题目: 程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒.(C#语言) 要求: 1.要有联动性,老鼠 ...
- C#面向对象试题一道,猫大叫,老鼠逃跑,主人惊醒。
程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒.(C#语言) 要求:1.要有联动性,老鼠和主人的行为是被动的. 2.考虑可扩展性,猫的叫声可能引起其他联动效应. 答:方法一: public ...
- 猫大叫,鼠速逃,人醒了
一道.Net程序员面试题的讨论:猫大叫,鼠速逃,人醒了. 考虑: (1)联动性 (2)可扩展性 编程实现它. 试了一下. 1 using System; 2 3 namespace de ...
- 电脑发出很大的嗡嗡声_跟踪嗡嗡声的十大方法
电脑发出很大的嗡嗡声 "Tracking consumer trends is one way to gain inspiration, helping you dream up profi ...
- 18-19款迈巴赫S400改装原厂3D大柏林之声,天籁之音
大家好,我是小志bzs878,专注名车原厂升级,欢迎戳戳右上角"+"号关注一下,持续为您带来精彩改装案例 原厂3D大柏林之声音响共有27个扬声器和两个功放共1590瓦的功率组成.把 ...
- 游戏创作——爱猫大作战乀
今天,我玩到一款全新的小游戏--爱猫大作战
最新文章
- NetLink Communication Mechanism And Netlink Sourcecode Analysis
- java 序列化 例子_Java序列化和反序列化例子
- Android 中的编码与解码
- Python自动生成10000个java类使用APT注解后引发的问题
- 掌握AI核心技术没有秘籍,能自己创造就是王道
- 网易10万+课程迅速刷屏又迅速被封:“违规”背后的思考
- VC CUtilityLZW 效率还行的LZW压缩算法,随机数加密
- Github/github 初始化教程
- antd的timePicker.RangePicker设置结束时间不可早于开始时间
- 80386汇编_寄存器 寻址方式介绍
- hadoop详细笔记(十一) mapreduce数据分析案例之线段重叠案例
- [IT与培训]IT培训与企业建设的思路
- 计算机教学得意之处,看不懂没关系,知道厉害就行了:中科大俩教授11年解了两道数学难题...
- UML协作图(通信图)——软件需求分析与设计
- 博客大巴,自动登录,并发布信息开发小计。
- 【微信公众号】获取用户信息
- 安科瑞企业综合能效管理系统 时丽花
- 猜数字游戏c语言编程,【游戏编程】猜数字游戏(C语言)
- 卡牌大师怎么玩_LOL钻石速成 卡牌大师崔斯特完美攻略
- 为企业完成数字化转型,新零售,这个概念是相对于传统零售而言的。
热门文章
- AngularJS 表格
- Ubuntu下GTK的安装、编译和测试
- 干掉ubuntu中的overlay scrollbar
- away3d 4.0.9Gold 学习笔记 加载方法总结(4)
- 虚拟化技术--桌面虚拟化(VDI)
- linux 自动安装系统,cobbler 自动安装linux系统
- 2020江苏省计算机等级考试题库,2020年江苏省计算机等级考试易考套餐:三级数据库技术题库+教材...
- 手机学python语言用什么软件好_盘点几个在手机上可以用来学习编程的软件
- SpringMVC 配置注解的映射器、适配器(重点)
- COM.MYSQL.JDBC.DRIVER 和 COM.MYSQL.CJ.JDBC.DRIVER的区别