猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒

程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
要求:  
1.要有联动性,老鼠和主人的行为是被动的。
2.考虑可扩展性,猫的叫声可能引起其他联动效应。

要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。

      2. 对老鼠和主人进行抽象

  1 public interface Observer
  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     } 
时间: 2024-08-25 05:51:46

猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒的相关文章

程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒

第一种解决方案用事件来解决:是多级的联动:即:猫叫->老鼠跑->人醒 1 public class Cat 2 { 3 public delegate void Crying(object sender,EventArgs e)://定义一个猫叫委托 4 public event Crying cry://定义猫叫事件 5 public void OnCry(EventArgs e) 6 { 7 if(cry!=null) 8 { 9 cry(this,e): 10 } 11 } 12 pub

观察者模式(猫大叫一声,主人惊醒,老鼠跑)

public delegate void SubEventHandle(); public abstract class Subject { public event SubEventHandle SubEvent; public void OnSub() { if (SubEvent != null) SubEvent(); } } public abstract class Observer { public Observer(Subject sub) { sub.SubEvent += n

【偶像大师 白金星光】的【Variable Tone】技术大公开!偶像从哪里看都那么可爱,VA小组谈制作方针

http://game.watch.impress.co.jp/docs/news/1016369.html 自从街机版的运营依赖,今年迎来了[偶像大师]系列的11周年.在CEDEC 2016的第一天,开展了关于最新作PS4上的[偶像大师  白金星光]的演讲. 登台演讲的,有万代南梦宫工作室的视觉美术阿部貴之氏,本做的背景主美富田智子氏,以及本作的主程前澤圭一氏. 本作作为系列的第一个PS4版,从发布开始偶像们的视觉表现就得到了很高的评价,这次的演讲是以制作时的视觉表现的[目标]为主题的. 万代

扒一扒各大电商网站的m站都用的什么前端技术输入日志标题

凡客首页使用Swiper和zepto,没有使用jquery , 静态首页+js交互,  资源加载使用 lazyLoad X-AspNet-Version: 4.0.30319 X-AspNetMvc-Version: 3.0 X-Powered-By: ASP.NET Accept-Encoding: gzip, deflate, sdch 框架 zepto.js和jquery.js函数都差不多啊,zepto.js有什么优点呢     淘宝也使用了  zepto.js,还有 aplus.0.2.

如何评测软件工程知识技能水平

一.软件工程师的软件工程知识技能水平高低主要体现在哪些方面总结 1.软件工程师 软件工程师英文是Software Engineer,是从事软件职业的人员的一种职业能力的认证,通过它说明具备了工程师的资格.软件工程师是从事软件开发相关工作的人员的统称.软件工程师包括软件设计人员.软件架构人员.软件工程管理人员.程序员等一系列岗位,工作内容都与软件开发生产相关.软件工程师的技术要求是比较全面的,除了最基础的编程语言(C/C++/JAVA等).数据库(SQL/ORACLE/DB2等)等,还有诸多如AJ

猫 老鼠 人的编程题

程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒.(C#语言) 要求: 1.要有联动性,老鼠和主人的行为是被动的. 2.考虑可扩展性,猫的叫声可能引起其他联动效应. 要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法.2. 对老鼠和主人进行抽象 评分标准: 构造出Cat.Mouse.Master三个类,并能使程序运行(2分) 从Mouse和Master中提取抽象(5分) 联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒.(3分) public interf

转-观察模式 猫叫鼠跑人醒

猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒. public interface Observer    {        void Response();    //观察者的响应,如是老鼠见到猫的反映    }    public interface Subject    {        void AimAt(Observer obs);  //针对哪些观察者,这里指猫的要扑捉的对象---老鼠    }    public class Mouse : Observer    {       

C#习题大全

C#习题大全 1.String str=new String("a")和String str = "a"有什么区别? String str = "a"; 这个只是一个引用,内存中如果有“a"的话,str就指向它,如果没有才创建如后还用到"a"这个字符串的话并且是这样用: String str1 = "a"; String str2 = "a"; String str2 = &q

.net面試4套

一 1. 面向对象的思想主要包括什么? 答: 继承,多态,封装,类,对象,接口,聚集,聚合,泛化 2. 什么是ASP.net中的用户控件 答: 用户控件就是使用.ascx作为扩展名的文件,其将多种服务器端控件组合在一起,作为一个单独的控件服务于页面.这种用户控件存在的问题如,将其拖到不同级别的目录下后里面的图片等的相对路径会变得不准确.需要自已写方法调整. 3.什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS.CLS和CLR分别作何解释? 答: 应用程