設計模式-行為型模式-中介者模式
設計模式-行為型模式-中介者模式
行為型模式
劃分類和物件的職責。
中介者模式
進銷存管理,即採購,銷售,庫存。
其中類圖
程式碼如下
public class Purchase {
// 採購IBM電腦
public void buyIBMcomputer(int number){
// 訪問庫存
Stock stock = new STock();
// 訪問銷售
Sale sale = new Sale();
// 電腦銷售情況
int saleStatus = sale.getSaleStatus();
// 對銷售進行判斷
if(saleStatus > 80){ // 銷售情況良好
System.out.println("採購IBM電腦" + number + "臺");
// 往庫存裡放入產品
stock.increase(number);
}else {
int buyNumber = number / 2; // 折半銷售
System.out.println("採購IBM電腦" + number + "臺");
}
}
// 不再採購IBM電腦
public void refuseBuyIBM(){
System.out.println("不再採購IBM電腦");
}
}
該Purchase定義了採購電腦的標準。根據電腦的銷售情況,往庫存裡放入產品。如果銷售不好,則折半銷售。
另外定義了一個不再採購IBM電腦。
庫存管理
public class Stock{
// 初始化
private static int COMPUTER_NUMBER = 100;
// 庫存增加
public void increase(int number){
COMPUTER_NUMBER = COMPUTER_NUMBER + number;
}
// 庫存降低
public void decrease(int number){
COMPUTER_NUMBER = COMPUTER_NUMBER - number;
}
// 獲得庫存數量
public int getStockNumber(){
return COMPUTER_NUMBER;
}
// 通知銷售進行銷售
public void clearStock(){
Purchase purchase = new Purchase();
Sale sale = new Sale();
sale.offSale(); // 折半銷售
purchase.refuseBuyIBM(); // 要求不再採購
}
}
然後書寫銷售管理
public class Sale{
// 銷售
public void sellIBMComputer(int number){
// 訪問庫存
Stock stock = new Stock();
// 訪問採購
Purchase purchase = new Purchase();
if(stock.getStockNumber() < number){ // 如果庫存數量不足,進行購買
purchase.buyIBMcomputer(number);
}
stock.decrase(number); // 銷售完成以後,清理庫存
}
// 反饋銷售情況,根據銷售判斷是否折半
public int getSaleStatus(){
Random rand = new Random(System.currentTimeMillis());
int saleStatus = rand.nextint(100);
return saleStatus;
}
// 進行折半銷售
public void offSale(){
Stock stock = new Stock();
}
}
最後繪製場景
public class Client{
public static void main(String[] args){
// 採購人員採購電腦
Purchase purchase = new Purchase();
purchase.buyIBMcomputer(100);
// 銷售電腦
Sale sale = new Sale();
sale.selllBMComputer(1);
// 庫房管理人員管理庫存
Stock stock = new Stock();
stock.clearStock();
}
}
改進
違反迪米特。
增加中介者
// 抽象中介者
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{
public void execute(String str, Object...objects){
if(str.equals("purchase.buy")){ // 如果需要採購電腦
this.buyComputer((Integer)objects[0]); // 通知採購
}else if(str.equals("sale sell")){ // 銷售電腦
this.sellComputer((Integer)object[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){ // 如果銷售良好
super.stock.increase(number);
}else{
int buyNumber = number / 2;
}
}
private void sellComputer(int number){
if(super.stock.getStockNumber() < number){ // 庫存不夠銷售的時候
super.purchase.buyIBMcomputer(number);
}
super.stock.decrease(number);
}
// 折半銷售電腦
private void offSell(){
}
// 清倉處理
private void clearStock(){
// 要求清倉銷售
super.sale.offSale();
// 要求採購人員不要採購
super.purchase.refuseBuyIBM();
}
}
然後對同事進行抽象
public abstract class AbstractColleague{
protected AbstractMediator mediator;
public AbstractColleagur(AbstractMediator _mediator){
this.mediator = _mediator;
}
}
採購類
public class Purchase extends AbstractColleague{
public Purchase(AbstractMediator _mediator){ // 和中介建立聯絡
super(_mediator);
}
// 採購電腦
public void buyIBMcomputer(int number){
super.meidator.execute("purchase.buy", number);
}
// 不在採購電腦
public void refuseBuyIBM(){
}
}
對於庫存管理
public class Stock extends AbstractColleague{
public Stock(ABstractMediator _mediator){
super(_meidator);
}
// 剛剛開始電腦
private static int COMPUTER_NUMBER = 100;
// 庫存通知
public void increase(int number){
COMPUTER_NUMBER = COMPUTER_NUMBRT + number;
}
// 庫存降低
public void decrease(int number){
COMPUTER_NUMBER = COMPUTER_NUMBER - number;
}
// 獲得庫存數量
public int getStockNumber(){
return COMPUTER_NUMBER;
}
// 存貨量多,不採購,進行銷售
public void clearStock(){
super.mediator.execute("stock.clear");
}
}
銷售管理,類似不在闡述。
對於場景類進行修改如下
public class Client{
public static void main(String[] args){
AbstractMediator mediator = new Mediator();
Purchase purchase = new Purchase(mediator); // 傳入具體的場景
purchase.buyIBMcomputer(100);
Sale sale = new Sale(mediator);
sale.sellIBMComputer(1);
Stock stock = new Stock(mediator);
stock.clearStock();
}
}
應用
MVC,閘道器,一個購物車栗子,需求為選擇顏色,並輸入購買數量,要求和從後臺獲取到的庫存進行對比,在頁面顯示。思路,為三方,庫存資料,輸入資料,顯示結果,引入中介者,在中介者內部進行資料的判斷,並將結果輸出,如果此時需要增加新的選項,直接在中介者內部書寫業務程式碼即可。
總結
有中介者和同事類,中介者透過get和set方法將同事傳入,然後進行資料的交換,中介完成任務,然後同事類,透過構造方法將中介傳入,然後和中介進行交流,獲取資訊。
中介,get,set傳入同事,進行資料處理,交換。
同事,透過構造傳入,進行和中介通訊。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1343/viewspace-2818285/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 設計模式之中介者模式(行為型)設計模式
- 行為型模式:中介者模式模式
- 設計模式之中介者模式設計模式
- 行為型設計模式 - 觀察者模式詳解設計模式
- 設計模式實戰 - 中介者模式設計模式
- 極簡設計模式-中介者模式設計模式
- 行為型設計模式---模板方法觀察者模式責任鏈模式設計模式
- C#設計模式(16)——中介者模式C#設計模式
- Android原始碼設計模式-中介者模式Android原始碼設計模式
- C#設計模式之中介者模式C#設計模式
- Java學設計模式之中介者模式Java設計模式
- 設計模式學習(十八)中介者模式設計模式
- 設計模式----中介模式設計模式
- 設計模式-中介模式設計模式
- 行為型設計模式設計模式
- 設計模式(十七)中介者設計模式
- 設計模式之中介者設計模式
- 設計模式 | 中介者模式及典型應用設計模式
- 折騰Java設計模式之中介者模式Java設計模式
- 18.java設計模式之中介者模式Java設計模式
- 設計模式(十九)——中介者模式(智慧家庭案例)設計模式
- 聊一聊設計模式(四)-- 行為型設計模式設計模式
- (Java)設計模式:行為型Java設計模式
- 行為型設計模式 - 狀態模式詳解設計模式
- 軟體設計模式系列之十九——中介者模式設計模式
- Rust語言之GoF設計模式:中介者Mediator模式RustGo設計模式
- 行為型設計模式 - 備忘錄模式詳解設計模式
- 行為型設計模式 - 責任鏈模式詳解設計模式
- 《JavaScript設計模式與開發實踐》模式篇(11)—— 中介者模式JavaScript設計模式
- Java進階篇設計模式之十 ---- 訪問者模式和中介者模式Java設計模式
- 設計模式(十九)----行為型模式之命令模式設計模式
- 軟體設計模式學習(二十一)中介者模式設計模式
- 行為型:觀察者模式模式
- 大話 PHP 設計模式--行為型PHP設計模式
- 物件導向-設計模式-行為型物件設計模式
- 中介者模式模式
- JAVA設計模式 4【建立型】理解建造者模式Java設計模式
- 中介者設計模式——業務實踐設計模式