C# 观察者模式(委托的使用)

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

namespace DelegateTest
{
    class Program
    {  
        static void Main(string[] args)
        {

            ItemButton CancelBtn = new ItemButton();
            ItemButton ConfirmBtn = new ItemButton();

            MainBehavior mainWin = new MainBehavior(CancelBtn, ConfirmBtn);
            mainWin.ConfirmBtn.OnClick();
            mainWin.CancelBtn.OnClick();

            Console.ReadKey();
        }      
    }

    class ItemButton
    {
        public Action OnClicked;
        public bool ItemEnable;

        public ItemButton()
        {
            ItemEnable = true;
        }

        public void OnClick()
        {
            if (ItemEnable)
            {
                OnClicked();
            }
        }
    }

    class MainBehavior:View
    {
        public ItemButton CancelBtn;
        public ItemButton ConfirmBtn;

        public MainBehavior(ItemButton cancel, ItemButton confirm)
        {
            this.CancelBtn = cancel;
            this.ConfirmBtn = confirm;
            RegisterEvent();
            AddEventHandler(EventTypes.CloseWinNotify, CloseWin);
            AddEventHandler(EventTypes.PopupWinNotify, OpenWin);
        }

        private void RegisterEvent()
        {
            CancelBtn.OnClicked = delegate()
            {
                RaiseEvent(EventTypes.CloseWinNotify, "close windows");
            };

            ConfirmBtn.OnClicked = () =>
                { 
                    RaiseEvent(EventTypes.PopupWinNotify, "Open window");
                };
        }


        private void CloseWin(params object[] args)
        {
            Console.WriteLine(args[0].ToString());
        }

        private void OpenWin(params object[] args)
        {
            Console.WriteLine(args[0].ToString());
        }
    }

    class View
    {
        protected Dictionary<EventTypes, EventHandlerDel> EventDictionary;

        public View()
        {
            EventDictionary = new Dictionary<EventTypes, EventHandlerDel>();
        }

        public void RaiseEvent(EventTypes type, params object[] args)
        {
            EventHandler(type, args);
        }

        public void EventHandler(EventTypes type, params object[] args)
        {
            foreach (var e in EventDictionary.Keys)
            {
                if (type.CompareTo(e) == 0)
                {
                    EventDictionary[e](args);
                }
            }
        }

        public void AddEventHandler(EventTypes type,EventHandlerDel method)
        {
            EventDictionary.Add(type, method);
        }
    }

    delegate void EventHandlerDel(params object[] args);

    enum EventTypes
    { 
        CloseWinNotify,
        PopupWinNotify,
    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值