• 一道猫和老鼠吵醒主人的笔试题(C#)


    程序設計:貓大叫一聲,所有的老鼠都開始逃跑,主人被驚醒。(C#語言)
    要求:
        1.要有聯動性,老鼠和主人的行為是被動的。
        2.考慮可擴展性,貓的叫聲可能引起其他聯動效應
         大部分答案都是使用的事件编程,我这里换了一下思路,使用观察着模式,用接口也实现了,因为考虑到第二个要求,即猫大叫也可能直接导致主人惊醒,所以Man也继承了ICatCatcher接口
    源代码如下:
    using System;

    using System.Collections;



    namespace test

    {



         public interface ICatCatcher


    {

             void DoSth();


    }



         public interface ICatSubject


    {

             void RegesiterCatCatcher(ICatCatcher catCatcher);

             void Miao();


    }



         public interface IRatSubject


    {

             void RegesiterRatCatcher(IRatCatcher ratCatcher);

             void Run();


    }



         public interface IRatCatcher


    {

             void Wake();


    }



         public class Cat:ICatSubject


    {

             public Cat()


    {


    }




             private ArrayList catcherList = new ArrayList();

             public void RegesiterCatCatcher(ICatCatcher catcher)


    {


    catcherList.Add( catcher );


    }



             public void Miao()


    {


    Console.WriteLine(
    "Miao" );



                  for(int i=0;i<catcherList.Count;i++)


    {


    ICatCatcher catCatcher = (ICatCatcher)catcherList;


    catCatcher.DoSth();


    }


    }




    [STAThread]

             public static void Main()


    {


    Cat cat =
    new Cat();





    Rat[] rat =
    new Rat[10];

                  for( int i=0;i<10;i++)


    {


    rat =
    new Rat(cat);


    }




    Man man =
    new Man(rat,cat);




    cat.Miao();


    }


    }



         public class Rat:ICatCatcher,IRatSubject


    {

             public Rat(ICatSubject catSub)


    {


    catSub.RegesiterCatCatcher(
    this);


    }



             public void DoSth()


    {


    Run();


    }




             private ArrayList ratcherList = new ArrayList();

             public void RegesiterRatCatcher(IRatCatcher catcher)


    {


    ratcherList.Add( catcher );


    }



             public void Run()


    {


    Console.WriteLine(
    "Rat Run");

                  for(int i=0;i<ratcherList.Count;i++)


    {


    IRatCatcher ratCatcher = (IRatCatcher)ratcherList;


    ratCatcher.Wake();


    }


    }


    }



         public class Man:ICatCatcher,IRatCatcher


    {

             public Man(IRatSubject[] ratSub,ICatSubject catSub)


    {

                  for( int i=0 ;i<ratSub.Length;i++)


    {


    ratSub.RegesiterRatCatcher(
    this);


    }


    catSub.RegesiterCatCatcher(
    this);


    }



             public void DoSth()


    {


    Console.WriteLine(
    "Cat bring on Wake" );


    }




             public void Wake()


    {


    Console.WriteLine(
    "Rats bring on Wake" );


    }


    }

    }


            这里如果调试会出现一点点小问题,就是老鼠有很多,每个老鼠的Run都会Wake一下Man,所以感觉是主人被多次惊醒,其实这只是因为计算机总是按照顺序来执行程序的,能够模拟到这种效果应该已经算符合题意了


            这里如果调试会出现一点点小问题,就是老鼠有很多,每个老鼠的Run都会Wake一下Man,所以感觉是主人被多次惊醒,其实这只是因为计算机总是按照顺序来执行程序的,能够模拟到这种效果应该已经算符合题意了
  • 相关阅读:
    TopShelf注册win10 服务
    win 10服务简单注册
    关于Win10 的服务注册
    泛型 Generic
    数据转换成字符串格式
    蛋白粉怎么吃
    6 ways to Sort Pandas Dataframe: Pandas Tutorial
    GET and POST requests using Python
    python中安装包出现Retrying, 国内pip源提示“not a trusted or secure host”解决
    Anaconda 4.7.5
  • 原文地址:https://www.cnblogs.com/bober/p/2108077.html
Copyright © 2020-2023  润新知