Java猫叫老鼠跑人惊醒_关于猫叫、老鼠逃跑、人被惊醒的程序设计
题目是这样的:猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。
要求:
1、要有联动性,老鼠和人的行为是被动的
2、考虑可扩展行,猫叫声可能会引起其他联动效应
看到这个程序设计题目,我的第一反应是用事件来解决,猫叫触发了事件,引起了老鼠的逃跑,老鼠逃跑又触发了事件导致主人被惊醒,或者是猫叫引起了老鼠逃跑、人醒。所以按照这个思路,我做出了如下的解答。
第一种解决方案用事件来解决:是多级的联动:即:猫叫-》老鼠跑-》人醒
第二种解决方案采用观察者模式:猫叫-》老鼠跑;猫叫-》人醒
首先,将猫、老鼠、和人分别抽象出来为三个类,分别为:Cat、Mouse、People。在Cat类中我们做如下处理:
public class Cat
{
public delegate void Crying(object sender,EventArgs e);//定义一个猫叫委托
public event Crying cry;//定义猫叫事件
public void OnCry(EventArgs e)
{
if(cry!=null)
{
cry(this,e);
}
}
public void StartCrying()//猫叫、触发cry事件
{
MessageBox.Show("猫开始叫了......");
EventArgs e=new EventArgs();
OnCry(e);
}
}
public class Mouse
{
public delegate void Runing(Object sender,EventArgs e);
public evnet Running run;
public void OnRun(EventArgs e)
{
if(run!=null)
{
run(this,e);
}
}
public Mouse(Cat c)
{
c.cry+=new Cat.Crying(c_Cry);//注册了猫叫事件,老鼠听到猫叫则开始逃跑
}
void c_Cry(object sender,EvnetArgs e)//老鼠在逃跑时又触发了人被惊醒事件
{
MessageBox.Show("老鼠开始逃跑了........");
EventArgs e=new EventArgs();
OnRun(e);
}
}
public class Person
{
public Person(Mouse m)
{
m.run+=new Mouse.Runing(m_run);//人注册了老鼠逃跑事件,老鼠逃跑时人被 惊醒
}
void m_run(object sender,EventArgs e)
{
MessageBox.Show("人醒了,What's wrong?");
}
}
BtnTest_Click(object sender, EventArgs e)
{
Cat c=new Cat();
Mouse m=new Mouse(c);
Person p=new Person(m);
c.StartCrying();
}
实验效果依次如下:
下面再通过另一个方式来解决这个问题。
Observer(观察者模式)
首先我们需要新建两个接口:
public interface Observer
{
void Response();//对被观察对象的行为作出反应,这里是指猫叫
}
public interface Subject
{
void AddObserver(Observer obj);//添加所有的观察者,在发生动作时对他们进行通知
}
public class Cat:Subject
{
ArrayList arrlyList;
public Cat()
{
arrlyList=new ArrayList();
}
void AddObserver(Observer obj)//实现添加观察着对象的方法
{
arrlyList.Add(obj);
}
void Cry()//猫叫了,并通知所有的观察者,作出相应的反应
{
MessageBox.Show("猫叫了......");
foreach(Observer obj in arrlyList)
{
obj.Response();
}
}
}
public class Mouse:Observer
{
public Mouse(Cat c)//将当前的观察着对象添加到观察者集合中
{
c.AddObserver(this);
}
public void Response()
{
MessageBox.show("老鼠开始逃跑了.....");
}
}
public class People:Observer
{
public People(Cat c)//将当前的观察着对象添加到观察者集合中
{
c.AddOberver(this);
}
public void Respone()
{
MessageBox.Show("人醒了,What's Wrong?");
}
}
Btn_Click(Object sender,EventArgs e)
{
Cat c=new Cat();
Mouse m=new Mouse(c);
People p=new People(c);
c.Cry();
}
来自:http://www.cnblogs.com/Olive116/archive/2012/11/12/2765934.html
Java猫叫老鼠跑人惊醒_关于猫叫、老鼠逃跑、人被惊醒的程序设计相关推荐
- 小新air15为啥没人买_小新air15为啥没人买
展开全部 配置看起来很厉害但细查却不尽人意.配置不错32313133353236313431303231363533e4b893e5b19e31333433653938跑分不错,但用起来的表现却不是该 ...
- 三人表决器_数电小实验之三人表决器
数电小实验 20级会员们的模电实验已经结束了,他们的培训计划已经从模电实验进行到了数电实验.他们将学习到一个新的知识--逻辑电路. 接下来让我们一起深入了解本次任务吧! 实验:三人表决器的设计和搭建 ...
- 微软电脑适合什么人用_眼膜适合什么年龄段的人使用呢?什么年龄段的人用什么样的眼膜...
很多女人为了保护自己的眼周肌肤都会使用眼膜,不过呢眼膜可不是适合所有人使用的,那么眼膜适合什么年龄段的人使用呢? 18岁以上可以用补水型眼膜 过了十八岁以后的朋友们可以开始用一些眼膜了,但最好选补水型 ...
- python老鼠打洞问题_内网渗透-老鼠打洞之SSH隧道
1. SSH隧道优势 (1)在内网中几乎所有得Linux/Unix服务器或个人机器都支持SSH协议,在使用的过程中可直接使用内网主机自带的SSH服务,不必再重新上传其他软件或者依赖,减少了被管理员发现 ...
- Java猫叫老鼠跑人惊醒_面试题:猫叫、老鼠跑、人醒的一点看法
这些天一直在面试中,做着不同的面试题,唉,悲催 上周做的一道面试题今天正好出现在园里的首页,看了一下这位同学的实现,基本上方向是对的,就是代码上细节没有注意,有一些错误,这里我就写一下我的理解 --- ...
- Java猫叫老鼠跑人惊醒_用代码表示如下情景:猫叫、老鼠逃跑、主人惊醒
### 1. 定义猫类型,并且该类型负责维护猫叫事件 *Cat.cs* ```csharp using System; namespace CatCry { /// /// 猫类型,维护猫叫事件 // ...
- 观察者模式和委托实现 - 老鼠跑,猫叫,人醒
老鼠跑,猫叫,人醒是典型的事件联动,解决此种情形,可以利用观察者模式或者事件委托来实现.利用设计模式时要考虑耦合,但利用事件委托的话,就不需要了.因为用委托的话,理解比较容易,这里没有单写,而是将委托 ...
- java猫抓老鼠_用猫抓老鼠的实例理解java中面向对象的编程与类和对象以及方法的概念...
今天看到马士兵讲的关于面向对象编程的思路,用了一个猫抓老鼠的例子,我觉得这个例子非常形象,于是写在这里,方便学习理解和以后查看 class cat{ //声明一个类–"猫" int ...
- 转-观察模式 猫叫鼠跑人醒
转-观察模式 猫叫鼠跑人醒 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒. public interface Observer { void Response(); // ...
最新文章
- js词法作用域(静态作用域)
- codeforces 962E Byteland, Berland and Disputed Cities 最小生成树变形
- C语言malloc和calloc的区别
- nginx服务无法启动,启动时报错1067以外终止
- Java:根据字节数截取字符串,但是汉字不能截取半个。
- c语言实验交换字母,新C语言实验学生版
- cakephp2.0 Utility class 简介
- Eclipse .class文件中文乱码
- demo10 关于JS Tree Shaking
- 第012讲 盒子模型经典应用
- U盘_PE启动+U存储+kali三合一启动盘制作教程
- Python词云库wordcloud 显示中文 !!!
- Windows强制关机之后,自动修复失败,无法开机的问题解决
- Linux ARM平台开发系列讲解(摄像头V4L2子系统) 2.12.5 V4L2 control的原理和实现
- Windows10搭建外网可访问的ftp服务器
- 使用SubstanceDesign和Unity插件ShaderForge制作风格化火焰
- pcl点云特征提取 法线估计 PFH FPFH NARF 惯量偏心矩 RoPs特征 视点特征直方图VFH GASD特征
- Centos安装rebar3
- 为什么更多企业会选择零代码开发平台?它的魅力在哪?
- 继承和多态(Java程序设计)
热门文章
- Verilog HDL 语言基础
- iOS10.1.1越狱插件推荐——DarkAppleStore
- java中负数取余数_数学 - java如何用负数进行模数计算?
- [机缘参悟-27]:鬼谷子-反应篇-反说之术,以毒攻毒,以错推错
- 计算机病毒近年相似,计算机病毒入侵检测与防治研究 毕业论文
- Selenium获取虎牙直播英雄联盟分区相关信息
- 小米路由器3连接校园网(哆点)
- vsftpd基于mysql_vsftpd的基于pam_mysql的虚拟用户配置示例
- 计算机辅助教学设计,计算机辅助教学设计介绍
- cocos creator 3d 3.0《懒猫跑酷》 实战开发教程