观察者模式使用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

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵海燕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值