漫说中介者模式--创业公司成长记
1. 中介者進化
一個公司,開始時大家都是平等關系的,例如ABC三人。
開始,公司很小,他們都是多面手,每個人既做生產,也做銷售,也做運輸。
如下圖所示:
?
隨著生意越來越好,公司規模變大,然后他們就發現這樣工作的話,要么生產跟不上,要么銷售跟不上,要么運輸跟不上。
他們發現了問題,因此他們決定改變現狀,每個人專攻一個,要么生成,要么銷售,要么運輸,那么他們就變成了如下圖所示的狀態:
市場越來越大,公司也越來越大,在公司要搶占盡可能多的市場份額時發現他們要頻繁的相互協調溝通,這耗費了他們大量的時間和精力,于是他們引入了外援。
此時,他們可以放心的各司其職,剩下的工作就交給M來處理。M就是中介者模式的中介。
上面的例子也許我們覺得理清楚他們之間的關系是件很簡單的事情,不需要請外援。那么如果人數不僅限于3個人的情況,又如何呢?
你是否還有足夠的自信能理清楚各自的職責呢?如果還可以的話,超過個位數達到幾十上百的時候又如何呢?
請看這樣是否更簡單呢?
當然,如果對象數量達到一定級別時,更適合層狀樹組織就不在我們的考慮內了。
2. 中介者模式結構圖:
? ? 中介者模式:用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。
實例代碼:
/** *Mediator Interface */ package com.journaldev.design.mediator;public interface ChatMediator {public void sendMessage(String msg, User user);void addUser(User user); }/** *Colleague Interface */ package com.journaldev.design.mediator;public abstract class User {protected ChatMediator mediator;protected String name;public User(ChatMediator med, String name){this.mediator=med;this.name=name;}public abstract void send(String msg);public abstract void receive(String msg); }/** *Concrete Mediator */ package com.journaldev.design.mediator;import java.util.ArrayList; import java.util.List;public class ChatMediatorImpl implements ChatMediator {private List<User> users;public ChatMediatorImpl(){this.users=new ArrayList<>();}@Overridepublic void addUser(User user){this.users.add(user);}@Overridepublic void sendMessage(String msg, User user) {for(User u : this.users){//message should not be received by the user sending itif(u != user){u.receive(msg);}}}}/** *Concrete Colleague */ package com.journaldev.design.mediator;public class UserImpl extends User {public UserImpl(ChatMediator med, String name) {super(med, name);}@Overridepublic void send(String msg){System.out.println(this.name+": Sending Message="+msg);mediator.sendMessage(msg, this);}@Overridepublic void receive(String msg) {System.out.println(this.name+": Received Message:"+msg);}}/** *Mediator Pattern Client */ package com.journaldev.design.mediator;public class ChatClient {public static void main(String[] args) {ChatMediator mediator = new ChatMediatorImpl();User user1 = new UserImpl(mediator, "Pankaj");User user2 = new UserImpl(mediator, "Lisa");User user3 = new UserImpl(mediator, "Saurabh");User user4 = new UserImpl(mediator, "David");mediator.addUser(user1);mediator.addUser(user2);mediator.addUser(user3);mediator.addUser(user4);user1.send("Hi All");}}3.優缺點和使用場景
中介者模式的優點
- 適當地使用中介者模式可以避免同事類之間的過度耦合,使得各同事類之間可以相對獨立地使用。
- 使用中介者模式可以將對象間一對多的關聯轉變為一對一的關聯,使對象間的關系易于理解和維護。
- 使用中介者模式可以將對象的行為和協作進行抽象,能夠比較靈活的處理對象間的相互作用。
適用場景
?????? 在面向對象編程中,一個類必然會與其他的類發生依賴關系,完全獨立的類是沒有意義的。一個類同時依賴多個類的情況也相當普遍,既然存在這樣的情況,說明,一對多的依賴關系有它的合理性,適當的使用中介者模式可以使原本凌亂的對象關系清晰,但是如果濫用,則可能會帶來反的效果。一般來說,只有對于那種同事類之間是網狀結構的關系,才會考慮使用中介者模式。可以將網狀結構變為星狀結構,使同事類之間的關系變的清晰一些。
?????? 中介者模式是一種比較常用的模式,也是一種比較容易被濫用的模式。對于大多數的情況,同事類之間的關系不會復雜到混亂不堪的網狀結構,因此,大多數情況下,將對象間的依賴關系封裝的同事類內部就可以的,沒有必要非引入中介者模式。濫用中介者模式,只會讓事情變的更復雜。
?
參考:1.?http://www.cnblogs.com/hzcxy/archive/2013/03/08/2949533.html
? ? ? ? 2.http://hi.baidu.com/quakeii/item/c8b6b2e9c7d6ca236dabb8c4
? ? ? ? 3.?http://www.journaldev.com/1730/mediator-design-pattern-in-java-example-tutorial
轉載于:https://www.cnblogs.com/davidwang456/p/3641497.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的漫说中介者模式--创业公司成长记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jenkis编译报错:需要class,i
- 下一篇: 漫说单例模式--宝宝成长记 你真的了解了