日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网状结构的解藕-中介者模式

發布時間:2024/6/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网状结构的解藕-中介者模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(#)定義:用一個中介對象封裝一系列的對象交互,中介者使各個對象不需要顯示的交互作用,從而使其耦合松散,而且可以獨立的改變他們的交互

?

(#)適用場景如下:

從圖一變換成圖二以后,系統整體變得很清晰,而且對于中間過程在中介中進行封裝,很容易進行擴展、

?

(#)TALK IS CHEEP    場景:如圖二

1.首先我定義一下抽象的同事協作類

public class AbstractColleague {protected AbstractMediator mediator;public AbstractColleague(AbstractMediator mediator) {this.mediator = mediator;}}

接下來定義他的三個具體的實現類

/*** 采購* 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("清理存貨數量為:"+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方法,其中使用...,對于參數進行了一個動態的變換

3.剩下的就是具體的具體的中介實現

/*** 具體的中介* 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,但是請注意,中介者的缺點是中介者可能膨脹的很大,關系越多那么越復雜,所以注意使用的場景,就比如上圖,當各個操作出現一個網狀結構的時候,

很適合使用這種模式

?

轉載于:https://www.cnblogs.com/wscit/p/6232329.html

總結

以上是生活随笔為你收集整理的网状结构的解藕-中介者模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。