zoukankan      html  css  js  c++  java
  • 程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#控制台程序)

    程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)

    要求:  

    1.要有联动性,老鼠和主人的行为是被动的。

    2.考虑可扩展性,猫的叫声可能引起其他联动效应。 

    ——————————————————————————————————

     第一种解决方案用事件来解决:是多级的联动:即:猫叫-》老鼠跑-》人醒

         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 Program
         {
             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();
             }
     
         } 

     第二种解决方案采用观察者模式:猫叫-》老鼠跑;猫叫-》人醒

     public interface Observer
         {
             void Response();    //观察者的响应,如是老鼠见到猫的反映
         }
         public interface Subject
         {
             void AimAt(Observer obs);  //针对哪些观察者,这里指猫的要扑捉的对象---老鼠
         }
         public class Mouse : Observer
         {public Mouse(Subject subj)
             {           
                 subj.AimAt(this);
             }
             
             public void Response()
             {
                 Console.WriteLine(name + " 老鼠开始逃跑了!");
             }
         }
         public class Master : Observer
         {   
             public Master(Subject subj)
             {           
                 subj.AimAt(this);
             }
             
             public void Response()
             {
                 Console.WriteLine("主人被惊醒!");
             }  
         }
      
         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("猫叫了!");
                 foreach (Observer obs in this.observers)
                 {
                     obs.Response();
                 }
             }
         }
         class Program
         {       
             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();
             }
         }
     
  • 相关阅读:
    java基础(七)面向对象(二)
    java基础 (六)面向对象(一)
    java基础(五)
    java基础(四)
    sqlloader导出数据和导入数据
    SQL LOADER 的用法 TXT文件导入非常之快
    在线代码对比/匹配 代码对比 在线文本比较
    JAVA 调用命令并输出
    RFC总结-SD模块
    使用BAPI_ACC_DOCUMENT_POST,创建会计凭证,用BADI扩展字段(转)
  • 原文地址:https://www.cnblogs.com/star8521/p/4977980.html
Copyright © 2011-2022 走看看