zoukankan      html  css  js  c++  java
  • C#经典机试题(猫叫)

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

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

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

    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
    {
    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设计..
    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 Class1 { 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(); } }

    转自:http://kb.cnblogs.com/page/50471/

  • 相关阅读:
    转】主流PHP框架间的比较(Zend Framework,CakePHP,CodeIgniter,Symfony,ThinkPHP,FleaPHP)
    总结 沉寂了大半年后的又一次
    xampp phpmyadmin产生403错误的解决办法
    Codeigniter 去除URL中的index.php
    【分享】C#中abstract与virtual的区别
    SQL Server 中使用Convert来取得datetime数据类型样式(全)
    Visual Studio 2012 RTM全系列简体中文正式版(附注册码)
    VS2008的Web.config、XML文件无法高亮显示的问题解决方案
    循环类里面的每一个属性
    Eclipse 打开已存在的Android项目的问题
  • 原文地址:https://www.cnblogs.com/lsgsanxiao/p/5337237.html
Copyright © 2011-2022 走看看