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/

  • 相关阅读:
    深入解读kubernetes网络基本原理
    Go!Go!Go!设计模式-组合设计模式
    Go!Go!Go!设计模式-创建型模式(简单工厂,工厂方法,抽象工厂)
    Linux内核之磁盘和分区
    Docker容器网络基础
    chart仓库之创建-入库-使用(helm,helm-push,chartmuseum)
    Go语言完整解析Go!Go!Go!(一)数据类型 之 Channel & Goroutine
    k8s爬坑集锦[网络问题]-服务无法访问
    数字证书的原理与应用&爬坑
    ingress的用法与原理
  • 原文地址:https://www.cnblogs.com/lsgsanxiao/p/5337237.html
Copyright © 2011-2022 走看看