码迷,mamicode.com
首页 > 其他好文 > 详细

观察者模式

时间:2016-07-20 09:05:09      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

观察者模式就是一个事物的发生、同时会导致另一个事物的发生,这两个事物之间的联系用程序来做。就是观察者模式。

例如:群里发了一个红包,这个事件就导致群员之间都在抢。

突然下了大雨,人们都打开雨伞。

电话突然响起,就有人接听

等等。。。。。

用代码如何实现呢?

1、事件的创造者

2、观察者

代码:

事件的创造者:

    public class Baby
    {

        public Baby(string name)
        {
            BabyName = name;
        }

        private string BabyName;

        public event Action<string> BabyCry;

        //  public event Action BabyCry;

        public void Cry()
        {

            Console.WriteLine("{0}、小朋友哭了", BabyName);

            if (BabyCry != null)
                BabyCry(BabyName);
        }
    }

 

观察者:

    public class Grandma
    {
        public void Coax(string name)
        {
            Console.WriteLine("{0},Coax,{1}", GetType(), name);
        }
    }

    public class Grandpa
    {
        public void See(string name)
        {
            Console.WriteLine("{0},See,{1}", GetType(), name);
        }
    }

    public class Mother
    {
        public void hold(string name)
        {
            Console.WriteLine("{0},hold,{1}", GetType(), name);
        }
    }

    public class Father
    {
        public void ask(string name)
        {
            Console.WriteLine("{0},ask,{1}", GetType(), name);
        }
    }

使用:

            Baby baby = new Baby("小苹果");
            baby.BabyCry += new Father().ask;
            baby.BabyCry += new Mother().hold;

            baby.BabyCry += new Grandpa().See;


            Grandma grandma = new Grandma();

            baby.BabyCry += grandma.Coax;

            baby.Cry();

            Console.WriteLine("--------------------------------------");

            ////去掉一个
            baby.BabyCry -= grandma.Coax;

            baby.Cry();

            Console.ReadLine();

运行结果:

技术分享

观察者模式

标签:

原文地址:http://www.cnblogs.com/lystory/p/5686959.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!