网状结构的解藕-中介者模式
生活随笔
收集整理的這篇文章主要介紹了
网状结构的解藕-中介者模式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
(#)定義:用一個中介對象封裝一系列的對象交互,中介者使各個對象不需要顯示的交互作用,從而使其耦合松散,而且可以獨立的改變他們的交互
?
(#)適用場景如下:
從圖一變換成圖二以后,系統(tǒng)整體變得很清晰,而且對于中間過程在中介中進行封裝,很容易進行擴展、
?
(#)TALK IS CHEEP 場景:如圖二
1.首先我定義一下抽象的同事協(xié)作類
public class AbstractColleague {protected AbstractMediator mediator;public AbstractColleague(AbstractMediator mediator) {this.mediator = mediator;}}接下來定義他的三個具體的實現(xiàn)類
/*** 采購* Author: scw* Time: 16-12-28*/ public class Purchase extends AbstractColleague {public Purchase(AbstractMediator mediator) {super(mediator);}public void buyIBMcomputer(int number){super.mediator.execute("purchase.buy",number);}public void refuseBuyIBM(){System.out.println("不再采購IBM");} }/*** 庫存* Author: scw* Time: 16-12-28*/ public class Stock extends AbstractColleague {public Stock(AbstractMediator mediator) {super(mediator);}private static int COMPUTER_NUM=100;public void increase(int num){COMPUTER_NUM+=num;System.out.println("電腦庫存="+COMPUTER_NUM);}public void decrease(int num){COMPUTER_NUM-=num;System.out.println("電腦庫存="+COMPUTER_NUM);}public int getStockNumber(){return COMPUTER_NUM;}public void clearStock(){System.out.println("清理存貨數(shù)量為:"+COMPUTER_NUM);super.mediator.execute("stock.clear");} }/*** 銷售* Author: scw* Time: 16-12-28*/ public class Sale extends AbstractColleague {public Sale(AbstractMediator mediator) {super(mediator);}public void sellIBMComputer(int num) {super.mediator.execute("sale.sell",num);System.out.println("銷售IBM電腦:"+num);}public int getSaleStatus(){int saleStatus = new Random(System.currentTimeMillis()).nextInt(100);System.out.println("IBM電腦銷售:"+saleStatus);return saleStatus;}public void offrSale(){super.mediator.execute("sale.offSell");} }2.接下來定義抽象的中介者
/*** Author: scw* Time: 16-12-28*/ 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); }注意其中使用的比較巧妙的就是抽象的execute方法,其中使用...,對于參數(shù)進行了一個動態(tài)的變換
3.剩下的就是具體的具體的中介實現(xiàn)
/*** 具體的中介* Author: scw* Time: 16-12-28ju*/ public class Mediator extends AbstractMediator {@Overridepublic void execute(String str, Object... objects) {if(StringUtils.contains(str,"purchase.buy")){this.buyComputer((Integer) objects[0]);}else if (StringUtils.contains(str,"sale.sell")){this.sellComputer((Integer) objects[0]);}else if(StringUtils.contains(str,"sale.offSell")){this.offSell();}else{this.clearStock();}}private void buyComputer(int num){int saleStatus = super.sale.getSaleStatus();if(saleStatus>70){System.out.println("銷售良好采購IBM電腦:"+saleStatus);}else {num = num/2;System.out.println("銷售不好采購IBM電腦:"+saleStatus);}super.stock.increase(num);}private void sellComputer(int num){if(super.stock.getStockNumber()<num){super.purchase.buyIBMcomputer(num);}super.stock.increase(num);}private void offSell(){System.out.println("折價銷售電腦"+stock.getStockNumber());}private void clearStock(){super.sale.offrSale();super.purchase.refuseBuyIBM();} }(#)總結,對于上面代碼的理解就是:中介持有所有要組合使用的對象,然后當單獨調用的一個其中的步奏的時候,回調中介的execute方法,在中介中對于這些不走
進行組裝拼接.ok,但是請注意,中介者的缺點是中介者可能膨脹的很大,關系越多那么越復雜,所以注意使用的場景,就比如上圖,當各個操作出現(xiàn)一個網狀結構的時候,
很適合使用這種模式
?
轉載于:https://www.cnblogs.com/wscit/p/6232329.html
總結
以上是生活随笔為你收集整理的网状结构的解藕-中介者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ==与equals 的使用比较
- 下一篇: JavaScript 实现块级作用域