结合事件与委托学习Observer模式

4 篇文章 0 订阅
2 篇文章 0 订阅

.net框架下的事件和委托理解起来比较困难,特别是委托这个特殊的类型学习起来总是要花点时间。

下面结合Observer模式做了一个简单的例子,希望对初学者有帮助。

首先建一个控制台应用程序。代码如下 :

Program.cs:

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

namespace ObserverPattern
{
    /// <summary>
    /// 声明一个委托类型(即函数模板,指向函数的地址,.net五大类型之一)
    /// </summary>
    public delegate void PersonEventHandler();

    /// <summary>
    /// 声明一个观察者
    /// </summary>
    public class Light
    {
        private Person person = null;
        public Light(Person p)
        {
            person = p;
            person.backOrOut += new PersonEventHandler(p_backOrOut);
        }

        private void p_backOrOut()
        {
            if (person.Dir .ToUpper() == "OUT")
            {
                Console.WriteLine("你要出去,灯会自动熄灭的。");
            }
            else if (person.Dir .ToUpper() == "BACK")
            {
                Console.WriteLine("当您回到家的时候,灯会自动亮起来。");
            }
        }
    }

    /// <summary>
    /// 声明一个主体
    /// </summary〉
    public class Person
    {
        private string dir;
        public string Dir
        {
            get
            {
                return dir;
            }
            set
            {
                dir = value;
            }
        }
        public Person(string dir)
        {
            this.dir = dir;
        }
        //声明一个事件(即委托类型的变量)
        public event PersonEventHandler backOrOut;
        public void OnBackOrOut()
        {
            if (backOrOut != null)
            {
                //执行事件(即委托邦定的函数)
                backOrOut();
            }
        }
    }

    /// <summary>
    /// 主程序
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请选择你是要出去还是回家,出去请输入out,回家请输入back。");
            string dir =Console .ReadLine();
            do
            {
                Person p = new Person( dir);
                Light l = new Light(p);
                p.OnBackOrOut();
                Console.WriteLine("请选择你是要出去还是回家,出去请输入out,回家请输入back。");
                dir = Console.ReadLine();
            } while (dir != "exit");
        }
    }
}

在.net框架下的事件与委托下,理解Observer应该容易一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值