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