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

mac2026-10-04  0

/// <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(); } }

 

最新回复(0)