一道貓和老鼠吵醒主人的筆試題(C#)

來源:互聯網
上載者:User
程式設計:貓大叫一聲,所有的老鼠都開始逃跑,主人被驚醒。(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,所以感覺是主人被多次驚醒,其實這隻是因為電腦總是按照順序來執行程式的,能夠類比到這種效果應該已經算符合題意了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.