23种设计模式-18-中介者模式

/// <summary>
    /// 用户
    /// </summary>
    public abstract class Person
    {
        public Person(string name, decimal money)
        {
            this.Name = name;
            this.Money = money;
        }

        public string Name { get; set; }

        public decimal Money { get; set; }

        /// <summary>
        /// 用户转账,使用中介转
        /// </summary>
        /// <param name="money"></param>
        /// <param name="mediator"></param>
        public abstract void TranferMoney(decimal money, Mediator mediator);

        public void ShowMoney()
        {
            Console.WriteLine("{0}现在的钱是:{1}", this.Name, this.Money);
        }
    }
/// <summary>
    /// 中介对象
    /// </summary>
    public abstract class Mediator
    {
        protected Person _Person1;

        protected Person _Person2;

        public Mediator(Person p1, Person p2)
        {
            this._Person1 = p1;
            this._Person2 = p2;
        }

        /// <summary>
        /// 2转账给1
        /// </summary>
        /// <param name="money"></param>
        public abstract void TransferTo1(decimal money);

        /// <summary>
        /// 1转账给2
        /// </summary>
        /// <param name="money"></param>
        public abstract void TransferTo2(decimal money);
    }
public class Zhangsan : Person
    {
        public Zhangsan(string name, decimal money) : base(name, money)
        {

        }

        public override void TranferMoney(decimal money, Mediator mediator)
        {
            mediator.TransferTo1(money);
        }
    }
    
    
    public class Lisi : Person
    {
        public Lisi(string name, decimal money) : base(name, money)
        {

        }

        public override void TranferMoney(decimal money, Mediator mediator)
        {
            mediator.TransferTo2(money);
        }
    }
/// <summary>
    /// 中介:支付宝转账
    /// </summary>
    public class Alipay : Mediator
    {
        public Alipay(Person p1, Person p2) : base(p1, p2)
        {

        }

        public override void TransferTo1(decimal money)
        {
            Console.WriteLine("{0}给{1}转账{2}", _Person2.Name, _Person1.Name, money);
            _Person1.Money += money;
            _Person2.Money -= money;
        }

        public override void TransferTo2(decimal money)
        {
            Console.WriteLine("{0}给{1}转账{2}", _Person1.Name, _Person2.Name, money);
            _Person1.Money -= money;
            _Person2.Money += money;
        }
    }
class Program
    {
        /// <summary>
        /// 中介者模式:
        /// 生活中到处都是中介者模式
        /// 例如:
        /// 原来我们买东西,需要将现金给卖家,现在可以用支付宝,微信转账来操作,解决了没有零钱和算错账的问题
        /// 原来我们聊天,只能去找到要聊天的那个人,然后聊天,现在可以直接使用微信或者QQ来聊天
        /// ......等等
        ///
        /// 上述所说的支付宝啊,微信啊其实都是中介者
        ///
        /// 例如转账:
        /// 不用中介者模式:我给你钱,我的钱减少,你的钱增加,万一你或者我计算错了怎么办呢,万一人更多了怎么办呢,一错错一大片
        /// 使用中介者模式:我支付宝转给你钱,你的钱增加,我的钱减少,支付宝的计算能力肯定大于人(找个擅长算数的人去算),万一算错了,直接修改支付宝就可以了
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            //初始化用户
            Person zhangsan = new Zhangsan("张三", 100);
            Person lisi = new Lisi("李四", 50);
            zhangsan.ShowMoney();
            lisi.ShowMoney();
            //初始化中介者:帮忙转账算钱的人
            Mediator alipay = new Alipay(zhangsan, lisi);

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

            zhangsan.TranferMoney(15, alipay);
            zhangsan.ShowMoney();
            lisi.ShowMoney();

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

            lisi.TranferMoney(25, alipay);
            zhangsan.ShowMoney();
            lisi.ShowMoney();

            Console.WriteLine("-------------------------------------------");
            Console.WriteLine("End");
            Console.ReadKey();
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值