C# 观察者模式

/*
 * 用户: Changweihua
 * 日期: 2013/7/11
 * 时间: 10:06
 *
 * changweihua@outlook.com
 * http://www.cmono.net
 *
 */
using System;
using System.Collections;
using System.Collections.Generic;
namespace TestObserver
{
    public class Cat : ISubject
    {
        private IList<IObserver> observers = new List<IObserver>();
                
        public void Notify()
        {
            foreach (IObserver item in observers)
            {
                item.Action();
            }
        }
                
        public void Register(IObserver o)
        {
            if(o != null || !observers.Contains(o))
            {
                observers.Add(o);
            }
                    
        }
                
        public void UnRgister(IObserver o)
        {
            if (observers != null && observers.Contains(o))
            {
                observers.Remove(o);
            }
        }
                
        public void Cry()
        {
            Console.WriteLine("猫叫了!");
            Notify();
        }
                
    }
            
    class Mouse : IObserver
    {
        public void Action()
        {
            Console.WriteLine("鼠跑了!");
        }
    }
          
    class Master : IObserver
    {
        public void Action()
        {
            Console.WriteLine("主人醒了!");
        }
    }
            
    class Program
    {
        public static void Main(string[] args)
        {
            Mouse mouse = new Mouse();
            Master master = new Master();
            Cat cat = new Cat();
          
            cat.Register(mouse);
            cat.Register(master);
          
            cat.Cry();
                    
            Console.ReadKey(true);
        }
    }
            
    /// <summary>
    /// 被观察者,有将观察者添加到容器中的方法
    /// </summary>
    public interface ISubject
    {
        void Notify();//主题变动时,通知现有观察者
        void Register(IObserver o);//观察者注册
        void UnRgister(IObserver o);//观察者取消注册
    }
            
    public interface IObserver
    {
        void Action();
    }
            
}

点击查看原图

知识共享许可协议
《C# 观察者模式》常伟华 创作。
采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。
相邻依据:发表时间
  • 多说评论
  • 签名
  • 新浪微博
  • 默认评论
  • Tab Header 5

1 条评论 / 点击此处发表评论

Tab Content 5

开发技术


开发平台和工具

sitemap     164.38ms