设计模式之观察者模式学习笔记

题目描述:C#编程实现猫叫时,老鼠逃跑,主人被惊醒。要求具有联动性和扩展性。


1. 观察者模式结构图


观察者模式定义了一种一对多的依赖关系,让多个观察者同时监视某一个主题对象。这个对象主题状态发生改变时,会通知所有观察者对象,是它们能自动更新自己。

2. C# 类图


3. 程序代码

IObserver.cs


namespace ObserverPattern
{
    public interface IObserver
    {
        void Response();
    }
}


ISubject.cs


namespace ObserverPattern
{
    public interface ISubject
    {
        void Notify();
    }
}


Cat.cs

using System;

namespace ObserverPattern
{
    public delegate void EventHandler();

    public class Cat :ISubject
    {
        public event EventHandler cry;
        private string name = "";

        public Cat(string name)
        {
            this.name = name;
        }

        #region ISubject Members

        public void Notify()
        {
            Console.WriteLine("Cat cry!");
            if (cry != null)
                cry();
        }

        #endregion
    }
}


Master.cs


using System;
 
namespace ObserverPattern
{
    public class Master :IObserver
    {
        private string name = "";
        private ISubject cat = null;
        /// 
        /// construct Master
        /// 
        /// 
        /// 
        public Master(string name, ISubject sub)
        {
            this.name = name;
            this.cat = sub;
        }
 
        private void WakeUp()
        {
            Console.WriteLine(name + " wake up!");
        }
        #region IObserver Members
 
        public void Response()
        {
            WakeUp();
        }
 
        #endregion
    }
}


Mouse.cs


using System;
 
namespace ObserverPattern
{
    public class Mouse : IObserver
    {
        private string name = "";
        private ISubject iSubj = null;
        /// 
        /// Mouse constructor
        /// 
        /// name of mouse
        /// cat object
        public Mouse(string name, ISubject sub)
        {
            this.name = name;
            this.iSubj = sub;
        }
 
        private void Escape()
        {
            Console.WriteLine(name + " begin to escape!");
        }
 
        #region IObserver Members
 
        public void Response()
        {
            Escape();
        }
 
        #endregion
    }
}


Program.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ObserverPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat("Tom");
            Mouse mouse = new Mouse("Jerry", cat);
            Master master = new Master("Master", cat);
 
            cat.cry += new EventHandler(mouse.Response);
            cat.cry += new EventHandler(master.Response);
            cat.Notify();
        }
    }
}

4. 运行结果:



你可能感兴趣的:(设计模式)