觀察者模式使用C#實現

1. 請用觀察者模式實現如下應用場景(15分)

夜裏有一隻貓大叫了一聲,同處一屋的老鼠接受到了貓大叫的信息,於是開始逃跑。同樣,主人聽到了,被吵醒了。

要求:

* 老鼠跟主人是被動的

* 要考慮聯動性與擴展性

評分標準:接口定義5分,接口實現5分,調用接口實現測試5分。本題滿分15分。

參考答案

using System;

using System.Collections.Generic;

using System.Text;

using System.Collections;

namespace LearnCatCry

{

    #region "接口設計5分"

    public interface Observer

    {

        void Response();//不可以加public修飾

    }

    public interface Cryer

    {

        void AddObserver(Observer objObserver);

    }

    #endregion

    #region"接口實現5分"

    public class Mouse : Observer

    {

        private string itsName;

        //private Cryer objCryer;

        public Mouse(string name, Cryer objCryer)

        {

            this.itsName = name;

            //this.objCryer = objCryer;

            objCryer.AddObserver(this);

        }

        #region Observer 成員

        public void Response()

        {

            Console.WriteLine(itsName + " begin to escape!");

        }

        #endregion

    }

   

    public class Host : Observer

    {

        public Host(Cryer objCryer)

        {

            objCryer.AddObserver(this);

        }

        #region Observer 成員

        public void Response()

        {

            Console.WriteLine("Host awoken!");

        }

        #endregion

    }

    public class Cat : Cryer

    {

        private ArrayList itsArrayList;

        public Cat()

        {

            itsArrayList = new ArrayList();

        }

        public void Cry()

        {

            Console.WriteLine("Cat is Crying!");

            foreach (Observer var in itsArrayList)

            {

                var.Response();

            }

        }

        #region Cryer 成員

        public void AddObserver(Observer objObserver)

        {

            itsArrayList.Add(objObserver);

        }

        #endregion

    }

    #endregion

    #region "調用實現5分"

    public class SolveCatCry

    {

        static void Main()

        {

            Cat objCat = new Cat();

            Mouse objMouse1 = new Mouse("Mouse1", objCat);

            Mouse objMouse2 = new Mouse("Mouse2", objCat);

            Host objHost = new Host(objCat);

            objCat.Cry();

        }

    }

    #endregion

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章