Java中的中介器设计模式-示例教程
中介者模式是行為設(shè)計模式之一 ,因此它處理對象的行為。 中介器設(shè)計模式用于在系統(tǒng)中不同對象之間提供集中式通信介質(zhì)。 根據(jù)GoF,中介者模式意圖是:
通過封裝不同對象集相互交互和通信的方式,允許松散耦合。 允許每個對象集的動作彼此獨立地變化。
在多個對象相互交互的企業(yè)應(yīng)用程序中,中介器設(shè)計模式非常有幫助。 如果對象彼此直接交互,則系統(tǒng)組件彼此緊密耦合,這使可維護(hù)性成本更高,并且難以靈活擴(kuò)展。 中介器模式著重于在對象之間提供介體以進(jìn)行通信,并幫助實現(xiàn)對象之間的損耗耦合。
空中交通管制員是調(diào)解員模式的一個很好的例子,其中機(jī)場控制室充當(dāng)不同航班之間通信的調(diào)解員。 中介器充當(dāng)對象之間的路由器,并且可以具有自己的邏輯來提供通信方式。
相互通信的系統(tǒng)對象稱為同事。 通常,我們有一個提供通信契約的接口或抽象類 ,然后我們有介體的具體實現(xiàn)。
對于我們的示例,我們將嘗試實現(xiàn)一個聊天應(yīng)用程序,用戶可以在其中進(jìn)行群聊。 每個用戶都將通過其名稱進(jìn)行標(biāo)識,他們可以發(fā)送和接收消息。 任何用戶發(fā)送的消息都應(yīng)被組中的所有其他用戶接收。
介體介面
首先,我們將創(chuàng)建Mediator接口,該接口將為具體的調(diào)解人定義合同。
package com.journaldev.design.mediator;public interface ChatMediator {public void sendMessage(String msg, User user);void addUser(User user); }同事界面
用戶可以發(fā)送和接收消息,因此我們可以具有用戶界面或抽象類。 我創(chuàng)建用戶作為抽象類,如下所示。
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); }請注意,用戶具有對中介對象的引用,這是不同用戶之間進(jìn)行通信所必需的。
混凝土調(diào)解員
現(xiàn)在,我們將創(chuàng)建具體的調(diào)解器類,它將在組中具有用戶列表,并為用戶之間的通信提供邏輯。
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);}}}}具體同事
現(xiàn)在,我們可以創(chuàng)建供客戶端系統(tǒng)使用的具體User類。
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);}}請注意,send()方法正在使用中介程序?qū)⑾l(fā)送給用戶,并且不知道中介程序?qū)⑷绾翁幚碓撓ⅰ?
中介者模式客戶端
讓我們用一個簡單的程序測試我們的聊天應(yīng)用程序,在該程序中,我們將創(chuàng)建調(diào)解器并將用戶添加到組中,并且其中一個用戶將發(fā)送一條消息。
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");}}請注意,客戶端程序非常簡單,并且不知道如何處理消息以及中介程序是否正在獲得用戶。
上面程序的輸出是:
Pankaj: Sending Message=Hi All Lisa: Received Message:Hi All Saurabh: Received Message:Hi All David: Received Message:Hi All中介者模式類圖
JDK中的中介者模式
- java.util.Timer類scheduleXXX()方法
- Java并發(fā)執(zhí)行器 execute()方法。
- java.lang.reflect.Method invoke()方法。
重要事項
- 當(dāng)對象之間的通信邏輯復(fù)雜時,調(diào)解器模式很有用,我們可以擁有一個通信的中心點來處理通信邏輯。
- Java消息服務(wù)(JMS)使用Mediator模式和Observer模式來允許應(yīng)用程序?qū)?shù)據(jù)訂閱和發(fā)布到其他應(yīng)用程序。
- 我們不應(yīng)該僅使用調(diào)解器模式來實現(xiàn)損失耦合,因為如果調(diào)解器的數(shù)量增加,那么將很難維持它們。
翻譯自: https://www.javacodegeeks.com/2013/08/mediator-design-pattern-in-java-example-tutorial.html
總結(jié)
以上是生活随笔為你收集整理的Java中的中介器设计模式-示例教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 奇瑞新能源推出新能源下乡购车补贴,最高补
- 下一篇: 适用于高级Java开发人员的十大书籍