日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java中的中介器设计模式-示例教程

發(fā)布時間:2023/12/3 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中的中介器设计模式-示例教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

中介者模式行為設(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ù)量增加,那么將很難維持它們。

參考: Java中的介體設(shè)計模式– JCG合作伙伴 Pankaj Kumar在開發(fā)人員食譜博客上的示例教程 。

翻譯自: https://www.javacodegeeks.com/2013/08/mediator-design-pattern-in-java-example-tutorial.html

總結(jié)

以上是生活随笔為你收集整理的Java中的中介器设计模式-示例教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。