中介者模式

2021-09-12 02:27:10 字數 3565 閱讀 5886

中介者模式適用於,完成一件事情,需要多方面協同合作,而多方面之間的耦合性較緊密

有乙個場景

採購部門要採購ibm的電腦,它根據以下兩個要素來決定採購數量。

銷售部門要反饋銷售情況,暢銷就多採購,滯銷就不採購。

即使是暢銷產品,庫存都有1000臺了,每天才賣出去10臺,也就不需要再採購了!

銷售模組是企業的贏利核心,對其他兩個模組也有影響:

庫房有貨,才能銷售,空手套白狼是不行的。

在特殊情況下,比如乙個企業客戶要一次性購買100臺電腦,庫存只有80臺,這時需要

催促採購部門趕快採購!

從以上分析來看,這三個模組都有自己的行為,並且與其他模組之間的行為產生關聯,

類似於我們辦公室的同事,大家各幹各的活,但是彼此之間還是有交叉的,於是彼此之間就

產生緊耦合

採購管理

public class purchase  else 

}// 不再採購ibm電腦

public void refusebuyibm()

}

庫存管理
public class stock 

//庫存降低

public void decrease(int number)

//獲得庫存數量

public int getstocknumber()

//存貨壓力大了,就要通知採購人員不要採購,銷售人員要盡快銷售

public void clearstock()

}

銷售管理
public class sale 

system.out.println("銷售ibm電腦" + number + "臺");

stock.decrease(number);

}// 反饋銷售情況,0~100之間變化,0代表根本就沒人賣,100代表非常暢銷,出乙個賣乙個

public int getsalestatus()

//折價處理

public void offsale()

}

場景類
public class client 

}

執行結果
------採購人員採購電腦--------

ibm電腦的銷售情況為:51

採購ibm電腦:50臺

庫存數量為:150

------銷售人員銷售電腦--------

ibm電腦的銷售情況為:51

採購ibm電腦:500臺

庫存數量為:650

ibm電腦的銷售情況為:51

採購ibm電腦:500臺

庫存數量為:1150

銷售ibm電腦1000臺

庫存數量為:150

------庫房管理人員清庫處理--------

清理存貨數量為:150

折價銷售ibm電腦150臺

不再採購ibm電腦

但是這個造就了很高的偶合度,這並不是我們所希望的,我們所希望得解耦合

耦合性越大,要想修改乙個就得修改一片,這不是物件導向設計所期望的

如果我們的管理部門多了怎麼辦,那顯然這樣是不合適的

所以我們需要乙個中介者,來作為這三個部門的交流核心

虛擬中介者類

public abstract class abstractmediator 

//中介者最重要的方法叫做事件方法,處理多個物件之間的關係

public abstract void execute(string str, object... objects);

}

中介者類
public class mediator extends abstractmediator  else if (str.equals("sale.sell"))  else if (str.equals("sale.offsell"))  else if (str.equals("stock.clear")) 

}//採購電腦

private void buycomputer(int number) else

}//銷售電腦

private void sellcomputer(int number)

super.stock.decrease(number);

}//折價銷售電腦

private void offsell()

//清倉處理

private void clearstock()

}

抽象同事類
public abstract class abstractcolleague 

}

public class newpurchase extends abstractcolleague 

//採購ibm電腦

public void buyibmcomputer(int number)

//不再採購ibm電腦

public void refusebuyibm()

}

public class newstock extends abstractcolleague 

//剛開始有100臺電腦

private static int computer_number = 100;

//庫存增加

public void increase(int number)

//庫存降低

public void decrease(int number)

//獲得庫存數量

public int getstocknumber()

//存貨壓力大了,就要通知採購人員不要採購,銷售人員要盡快銷售

public void clearstock()

}

public class newsale extends abstractcolleague 

//銷售ibm電腦

public void sellibmcomputer(int number)

//反饋銷售情況,0~100變化,0代表根本就沒人買,100代表非常暢銷,出乙個賣乙個

public int getsalestatus()

//折價處理

public void offsale()

}

public class newclient 中介者模式的優點

中介者模式的優點就是減少類間的依賴,把原有的一對多的依賴變成了一對一的依賴,同事類只依賴中介者,減少了依賴,當然同時也降低了類間的耦合

中介者模式的缺點

中介者模式的缺點就是中介者會膨脹得很大,而且邏輯複雜,原本n個物件直接的相互依賴關係轉換為中介者和同事類的依賴關係,同事類越多,中介者的邏輯就越複雜

中介者模式的使用場景

中介者模式適用於多個物件之間緊密耦合的情況,緊密耦合的標準是:在類圖**現了蜘蛛網狀結構。在這種情況下一定要考慮使用中介者模式,這有利於把蜘蛛網梳理為星型結構,使原本複雜混亂的關係變得清晰簡單

中介者模式

1.中間 類 namespace intermediarypattern 成員物件需要知道是哪個中介者在通知它事情 public abstract class member 各成員間要傳送訊息 public abstract void send string msg 這個方法其實是具體實施發訊息的 ...

中介者模式

中介者模式就是在物件之間的關係很複雜時用,名如其人,就像租房的黑中介一樣,如果每個房東都拿著很多租房者的資訊很麻煩,每個租房者都要拿著很多房東的資訊也麻煩,所以需要乙個中介來拿著這些資訊,租房者只需要發出租房的請求,中介會給你介紹合適的房東,房東只需要提交房屋資料就等著中介的人帶著訪客看房拿錢就行了...

中介者模式

中介者模式 mediator pattern 1 抽象中介者 mediator 角色 抽象中介者角色定義統一的介面用於各同事角色之間的通訊。具體中介者 concrete mediator 角色 具體中介者角色通過協調各同事角色實現協作行為,因此它必須依賴於各個同事角色。同事 colleague 角色...