首页 > 其他 > 详细

什么是观察者设计模式

时间:2017-02-05 18:16:32      阅读:316      评论:0      收藏:0      [点我收藏+]

一,在一开始我们先定义两个类,一个是Cat类(被观察者) ,另一个是mouse类(观察者),观察者设计模式是当被观察者状态发生改变,从而触发观察者的事件

代码如下:

Cat类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace GczDesign
{
    /// <summary>
    /// 被观察者 猫
    /// </summary>
    class Cat
    {
        private string name;
        private string color;

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

        /// <summary>
        /// 猫进屋(猫的状态发生改变)(被观察者的状态发生改变)
        /// </summary>
        public void CatComing()
        {
            Console.WriteLine(color + "的猫" + name + "喵喵喵 ...");

            if (catCome != null)
                catCome();
        }

        public event Action catCome;//声明一个事件 发布了一个消息
    }
}

Mouse类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace GczDesign
{ 
    /// <summary>
    /// 观察者类:老鼠
    /// </summary>
    class Mouse
    {
        private string name;
        private string color;

        public Mouse(string name, string color, Cat cat)
        {
            this.name = name;
            this.color = color;
            cat.catCome += this.RunAway;//把自身的逃跑方法 注册进 猫catCome事件里面  订阅消息
        }
        /// <summary>
        /// 逃跑功能
        /// </summary>
        public void RunAway()
        {
            Console.WriteLine(color + "的老鼠" + name + "说: 猫来, 赶紧跑");
        }
    }
}

执行事件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace GczDesign
{
    class Program
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat("小白", "白色");
            Mouse mouse1 = new Mouse("小灰", "灰色", cat);
            Mouse mouse4 = new Mouse("小黑", "黑色", cat);
            cat.CatComing();     //当猫的状态发生改变,从而触发观察者绑定在猫身上的事件(CatCome)
            Console.ReadKey();
        }
    }
}

从上得出的结果为:

技术分享

什么是观察者设计模式

原文:http://www.cnblogs.com/May-day/p/6367998.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!