行为型---中介者模式(Mediator Pattern)
2018-04-01 22:21
225 查看
中介者模式的定义
中介者模式,定义了一个中介对象来封装一系列对象之间的交互关系。中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为。中介者模式的结构
从生活中例子自然知道,中介者模式设计两个具体对象,一个是用户类,另一个是中介者类,根据针对接口编程原则,则需要把这两类角色进行抽象,所以中介者模式中就有了4类角色,它们分别是:抽象中介者角色,具体中介者角色、抽象同事类和具体同事类。中介者类是起到协调各个对象的作用,则抽象中介者角色中则需要保存各个对象的引用。有了上面的分析,则就不难理解中介者模式的结构图了,具体结构图如下所示:
namespace ConsoleApplication1 { /// <summary> /// 抽象中介者 /// </summary> public abstract class AbstractMediator { protected Purchase purchase; protected Sale sale; protected Stock stock; public AbstractMediator() { purchase = new Purchase(this); sale = new Sale(this); stock = new Stock(this); } //中介者最重要的方法叫做事件方法,处理多个对象之间的关系 public abstract void execute(string strFun, params object[] arg); } /// <summary> /// 具体中介者 /// </summary> public class Mediator : AbstractMediator { public override void execute(string strFun, params object[] arg) { switch (strFun) { case "purchase.buy": //采购电脑 this.buyComputer(Convert.ToInt32(arg[0])); break; case "sale.sell": //销售电脑 this.sellComputer(Convert.ToInt32(arg[0])); break; case "sale.offsell": //折价销售 this.offSell(); break; case "stock.clear": //清仓处理 this.clearStock(); break; default: break; } } //采购电脑 private void buyComputer(int number) { int saleStatus = sale.getSaleStatus(); if (saleStatus > 80) //销售情况良好 { Console.WriteLine("采购IBM电脑" + number + "台"); stock.increase(number); } else //销售情况不好 { int buynumber = number / 2; Console.WriteLine("采购IBM电脑" + number + "台"); } } //销售电脑 private void sellComputer(int number) { if (stock.getStockNumber() < number) //库存数量不够销售 { purchase.buyIBMcomputer(number); } stock.decrease(number); } //折价销售电脑 private void offSell() { Console.WriteLine("折价销售IBM电脑" + stock.getStockNumber() + "台"); } //清仓处理 private void clearStock() { //要求清仓销售 sale.offSale(); //要求采购人员不要采购 purchase.refuseBuyIBM(); } } /// <summary> /// 抽象同事类 /// </summary> public abstract class AbstractColleague { protected AbstractMediator mediator; public AbstractColleague(AbstractMediator _mediator) { this.mediator = _mediator; } } /// <summary> /// 具体同事类--采购类 /// </summary> public class Purchase : AbstractColleague { public Purchase(AbstractMediator _mediator) : base(_mediator) { } //采购IBM电脑 public void buyIBMcomputer(int number) { mediator.execute("purchase.buy", number); } //不再采购IBM电脑 public void refuseBuyIBM() { Console.WriteLine("不再采购IBM电脑"); } } /// <summary> /// 具体同事类--库存管理类 /// </summary> public class Stock : AbstractColleague { //模拟期初库存数 private static int COMPUTER_NUMBER = 100; public Stock(AbstractMediator _mediator) : base(_mediator) { } //库存增加 public void increase(int number) { COMPUTER_NUMBER = COMPUTER_NUMBER + number; Console.WriteLine("库存数量为:" + COMPUTER_NUMBER); } //库存减少 public void decrease(int number) { COMPUTER_NUMBER = COMPUTER_NUMBER - number; Console.WriteLine("库存数量为:" + COMPUTER_NUMBER); } //获取库存数量 public int getStockNumber() { return COMPUTER_NUMBER; } /* * 存货压力大了, * 就需要通知采购人员不要采购, * 销售人员要尽快销售 */ public void clearStock() { Console.WriteLine("清理存货是数量为:" + COMPUTER_NUMBER); mediator.execute("stock.clear"); } } /// <summary> /// 具体同事类--销售管理类 /// </summary> public class Sale : AbstractColleague { public Sale(AbstractMediator _mediator) : base(_mediator) { } //销售IBM电脑 public void SellIBMComputer(int number) { mediator.execute("sale.sell",number); Console.WriteLine("销售IBM电脑" + number); } //反馈销售情况,0~100变化,0代表根本就没人买,100代表非常畅销 public int getSaleStatus() { Random rand = new Random(); int saleStatus = rand.Next(100); Console.WriteLine("IBM电脑的销售情况为:" + saleStatus); return saleStatus; } //折价处理 public void offSale() { mediator.execute("sale.offsell"); } } class Program { static void Main(string[] args) { AbstractMediator mediator = new Mediator(); //采购人员采购电脑 Console.WriteLine("---------采购人员采购电脑---------"); Purchase purchase = new Purchase(mediator); purchase.buyIBMcomputer(100); //销售人员销售电脑 Console.WriteLine("---------销售人员销售电脑---------"); Sale sale = new Sale(mediator); sale.SellIBMComputer(1); //库存管理人员管理库存 Console.WriteLine("---------库存管理人员管理库存---------"); Stock stock = new Stock(mediator); stock.clearStock(); Console.ReadLine(); } } }View Code
相关文章推荐
- 十一个行为型模式5:中介者模式-Mediator Pattern【学习难度:★★★☆☆,使用频率:★★☆☆☆】
- 调停者模式(Mediator Pattern,对象行为型模式,中介者模式)
- 调停者模式(Mediator Pattern,对象行为型模式,中介者模式)
- C#设计模式之十七中介者模式(Mediator Pattern)【行为型】
- 23种设计模式(17)_行为型_中介者模式(Mediator Pattern)
- 设计模式(行为型)之中介者模式(Mediator Pattern)
- 设计模式——行为型模式之通过中介者模式(Mediator Pattern)实现各模块之间的解耦(二)
- C#设计模式之十七中介者模式(Mediator Pattern)【行为型】
- 二十.行为型设计模式——Mediator Pattern(中介者模式)
- "围观"设计模式(25)--行为型之中介者模式(Mediator Pattern)
- 设计模式系列5-----C++实现中介者模式(Mediator Pattern)
- 23种设计模式-10.中介者模式(Mediator Pattern)
- 行为型模式之中介者MEDIATOR
- 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)
- JAVA设计模式之 中介者模式【Mediator Pattern】
- 设计模式读书笔记之中介者模式(mediator pattern)
- 设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)
- 设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)
- 我所理解的设计模式(C++实现)——中介者模式(Mediator Pattern)
- 设计模式之中介者模式(Mediator Pattern)