设计模式之禅——中介者模式
来源:互联网 发布:家庭网络用哪个好 编辑:程序博客网 时间:2024/05/29 17:16
中介者模式
用一个中介对象封装一系列的对象交互,从而使其耦合松散,而且可以独立改变它们之间的交互
例子:卖商品的公司各个部分之间的交互
我们知道卖商品的公司一般有这几个部分:采购管理、销售管理、物流管理、供应商管理、存货管理、资产管理。
他们之间的交互如下:
是不是特别麻烦?主要是每个模块都需要跟多个模块沟通!实现它的代码就不写了,我们来找一个中介者吧。
每个模块只跟中介者交流,简单了很多,层次也不乱
这里我们来实现它的进销存活动。就是采购管理、销售管理、存货管理三者之间的活动。
UML图(idea自动合成,研究不深,可以结合代码理解)如下:
见代码
//抽象中介者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 str, Object...objects);}
//中介者public class Mediator extends AbstractMediator { //中介者中最重要的方法 @Override public void execute(String str, Object... objects) { if (str.equals("purchase.buy")) { //采购电脑 this.buyComputer((Integer) objects[0]); } else if (str.equals("sale.sell")) { //销售电脑 this.sellCompter((Integer) objects[0]); } else if (str.equals("sale.offsell")) { //折价销售 this.offsell(); } else if (str.equals("stock.clear")) { //清仓处理 this.clearStock(); } } private void buyComputer(int number){ int saleStatus = super.sale.getSaleStatus(); if(saleStatus > 80){ //销售情况很好 System.out.println("采购IBM电脑:" + number + "台"); }else{ //销售情况不好 int buyNumber = number/2;//折半采购 System.out.println("采购IBM电脑:" + buyNumber + "台"); } } private void sellCompter(int number){ if(super.stock.getComputerNumber() < number){ super.purchase.buyIBMcomputer(number); }else{ super.stock.decrease(number); } } //折价销售 private void offsell(){ System.out.println("折价销售IBM电脑" + stock.getComputerNumber() + "台"); } //清仓处理 private void clearStock(){ super.sale.offSale(); }}
//抽象同事类public abstract class AbstractColleague { protected AbstractMediator mediator; public AbstractColleague(AbstractMediator _mediator){ this.mediator = _mediator; }}
//购买类public class Purchase extends AbstractColleague{ public Purchase(AbstractMediator _mediator){ super(_mediator); } //采购IBM电脑 public void buyIBMcomputer(int number){ super.mediator.execute("purchase.buy", number); } //不再采购IBM电脑 public void refuseBuyIBM(){ System.out.println("不再采购IBM电脑"); }}
//库存管理类public class Stock extends AbstractColleague{ public Stock(AbstractMediator _mediator){ super(_mediator); } private static int COMPUTER_NUMBER = 100; //库存增加 public void increase(int number){ COMPUTER_NUMBER = COMPUTER_NUMBER + number; System.out.println("库存信息为: " + COMPUTER_NUMBER); } //库存降低 public void decrease(int number){ COMPUTER_NUMBER = COMPUTER_NUMBER - number; System.out.println("库存信息为: " + COMPUTER_NUMBER); } //获得库存数量 public int getComputerNumber(){ return COMPUTER_NUMBER; } //存货压力太大了,就要通知采购人员不要采购,销售人员要尽快销售 public void clearStock() { System.out.println("清理内存数量为: " + COMPUTER_NUMBER); super.mediator.execute("stock.clear"); }}
//销售类public class Sale extends AbstractColleague { public Sale(AbstractMediator _mediator) { super(_mediator); } public void sellIBMComputer(int number){ super.mediator.execute("sale.sell", number); System.out.println("销售IBM电脑" + number + "台"); } //反馈销售情况 public int getSaleStatus(){ Random random = new Random(System.currentTimeMillis()); int saleStatus = random.nextInt(100); System.out.println("IBM电脑的销售情况为:" + saleStatus); return saleStatus; } //折价处理 public void offSale(){ super.mediator.execute("sale.offsell"); }}
//场景类public class Client { public static void main(String[] args) { AbstractMediator mediator = new Mediator(); System.out.println("\n----------采购人员采购电脑--------"); Purchase purchase = new Purchase(mediator); purchase.buyIBMcomputer(100); System.out.println("\n----------销售人员销售电脑--------"); Sale sale = new Sale(mediator); sale.sellIBMComputer(1); System.out.println("\n----------库房管理人员清库处理--------"); Stock stock = new Stock(mediator); stock.clearStock(); }}/*Output----------采购人员采购电脑--------IBM电脑的销售情况为:71采购IBM电脑:50台----------销售人员销售电脑--------库存信息为: 99销售IBM电脑1台----------库房管理人员清库处理--------清理内存数量为: 99折价销售IBM电脑99台*/
中介者的优点显而易见——解耦和,那么它的应用场景也不必多说——类之间交互过于密切,需要解耦合~
3 0
- 学习设计模式之禅——中介者模式
- 《设计模式之禅》——中介者模式
- 设计模式之禅——中介者模式
- 设计模式之——中介者设计模式
- 设计模式之五——中介者模式
- C#设计模式之18——中介者模式
- 23种设计模式之——中介者模式
- Android设计模式之——中介者模式
- 设计模式——中介者模式
- 设计模式——中介者模式
- 设计模式——中介者模式
- 设计模式——中介者模式
- 设计模式——中介者模式
- 设计模式—Mediator中介者模式
- 大话设计模式—中介者模式
- Java设计模式—中介者模式
- 设计模式之中介者
- 设计模式 之 中介者
- 大型网站架构演变史
- 树模型和线性回归 在回归问题中的比较
- [http] 缓存
- WebSocket实战
- 如何快速的开发一个完整的iOS直播app(播放篇)
- 设计模式之禅——中介者模式
- 209. Minimum Size Subarray Sum
- [oc实战练习五]AFNetWorking再次学习
- ACM2016湖南省赛2016
- 我的程序之路(一)
- SVM边学边总结系列——线性不可分情况
- Codeforces Round #367 (Div. 2) B
- A Standard Default Color Space for the Internet - sRGB
- HTML中表格布局的优缺点