在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
题目:猫叫,老鼠逃跑,主人惊醒。(10分) 要点:1. 联动效果,运行代码只要执行Cat.Cryed()方法。2. 对老鼠和主人进行抽象 using System;
using System.Collections;
namespace ConsoleApplication1
{ public interface Observer { void Response();//观察者的响应,如是老鼠见到猫的反映 } public interface Subject { void AimAt(Observer obs);//针对哪些观察者,这里指猫的要扑捉的对象---老鼠 } public class Mouse : Observer { private string name; public Mouse(string name, Subject subj) { this.name = name;
subj.AimAt(this);
} public void Response() { Console.WriteLine(name + " attempt to escape!");
} } public class Master : Observer { public Master(Subject subj)
{ subj.AimAt(this);
} public void Response() { Console.WriteLine("Host waken!");
} } public class Cat : Subject { private ArrayList observers;
public Cat()
{ this.observers = new ArrayList(); } public void AimAt(Observer obs) { this.observers.Add(obs);
} public void Cry() { Console.WriteLine("Cat cryed!");
foreach (Observer obs in this.observers) { obs.Response(); } } } class MainClass
{ /**//// <summary> /// 应用程序的主入口点。
/// </summary>
[STAThread] static void Main(string[] args) { Cat cat = new Cat();
Mouse mouse1 = new Mouse("mouse1", cat); Mouse mouse2 = new Mouse("mouse2", cat); Master master = new Master(cat);
cat.Cry(); } } } -------------------------------------------------------------------------------- 设计方法二: 使用event -- delegate设计.. 程序代码 using System;
using System.Collections;
namespace ConsoleApplication1
{ public delegate void SubEventHandler(); public abstract class Subject { public event SubEventHandler SubEvent; protected void FireAway() { if (this.SubEvent != null) this.SubEvent();
} } public class Cat : Subject { public void Cry() { Console.WriteLine("cat cryed.");
this.FireAway();
} } public abstract class Observer { public Observer(Subject sub)
{ sub.SubEvent += new SubEventHandler(Response);
} public abstract void Response();???? } public class Mouse : Observer { private string name; public Mouse(string name, Subject sub) : base(sub) { this.name = name;
} public override void Response() { Console.WriteLine(name + " attempt to escape!");
} } public class Master : Observer { public Master(Subject sub) : base(sub){} public override void Response() { Console.WriteLine("host waken");
} } class MainClass
{ /**//// <summary> /// 应用程序的主入口点。
/// </summary>
[STAThread] static void Main(string[] args) { Cat cat = new Cat();
Mouse mouse1 = new Mouse("mouse1", cat); Mouse mouse2 = new Mouse("mouse2", cat); Master master = new Master(cat);
cat.Cry(); } } } |
请发表评论