18.观察者模式

namespace _19_Observer
{
    public class ATM
    {
        BankAccount bankAccount;
        public void Process(int data)
        {
            bankAccount.WithDraw(data);
        }
    }

    public class BankAccount
    {
        Emailer emailer;  //强依赖关系
        Mobile mobile;  //强依赖关系
        string userEmail = "";
        string phoneNumber = "";
        public void WithDraw(int data)
        {
            emailer.SendEmail(userEmail);
            mobile.SendNotification(phoneNumber);
        }
    }

    public class Emailer
    {
        public void SendEmail(string se)
        {

        }
    }
    public class Mobile
    {
        public void SendNotification(string sn)
        {

        }
    }
}

namespace _19_Observer_2
{
    public interface IAccountObserver
    {
        void Update(UserAccountArgs args);
    }
    public class UserAccountArgs : EventArgs
    {
        public string ToAddress { get; set; }
        public string MobileNumber { get; set; }
    }
    public class Emailer : IAccountObserver
    {
        public void Update(UserAccountArgs args)
        {
            string toAddress = args.ToAddress;
        }
    }

    public class Mobile : IAccountObserver
    {
        public void Update(UserAccountArgs args)
        {
            string mobileNumber = args.MobileNumber;
        }
    }

    public abstract class Subject
    {
        List<IAccountObserver> observerList = new List<IAccountObserver>();

        protected virtual void AddObserver(IAccountObserver observer)
        {
            observerList.Add(observer);
        }
        protected virtual void RemoveObserver(IAccountObserver observer)
        {
            observerList.Remove(observer);
        }
        protected virtual void Notify(UserAccountArgs args)
        {
            foreach (var observer in observerList)
            {
                observer.Update(args);
            }
        }
    }
    public class AccountChangeEventHandlerArgs : EventArgs
    {

    }

    public delegate void AccountChangeEventHandler(object sender, UserAccountArgs args);  //--> 接口,约定
    public class BankAccount : Subject
    {
        public event AccountChangeEventHandler AccountChange;
        public void WithDraw(int data)
        {
            UserAccountArgs args = new UserAccountArgs();
            Notify(args);
        }

        protected virtual void OnAccountChange(UserAccountArgs args)
        {
            if (AccountChange != null)
            {
                AccountChange(this, args);
            }
        }
    }

    public class EmailerEvent
    {
        public void Update(object sender, UserAccountArgs args)
        {
            string toAddress = args.ToAddress;
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            BankAccount bankAccount = new BankAccount();
            EmailerEvent email = new EmailerEvent();
            bankAccount.AccountChange += new AccountChangeEventHandler(email.Update);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值