23種設計模式-行為型模式之中介者模式(Java版本)

Java 中介者模式(Mediator Pattern)詳解

🧠 什么是中介者模式?

中介者模式是一種行為型設計模式,它通過定義一個中介者對象來封裝一組對象之間的交互。中介者使得各個對象不需要顯式地知道彼此之間的關系,從而減少了對象之間的耦合。對象與對象之間通過中介者進行通信,避免了直接交互。

中介者模式常用于多個對象之間存在復雜的關系和交互時,能夠減少對象之間的依賴關系并提高系統的靈活性。


🎯 使用場景

  • 當多個對象之間的交互復雜,直接通信會導致系統的復雜性增加時。
  • 需要避免類之間過多的耦合關系。
  • 系統中需要有一個集中式的對象來管理和協調各個對象的交互。

🏗? 模式結構

  • Mediator(抽象中介者):定義一個接口,用來與不同的對象進行交互。
  • ConcreteMediator(具體中介者):實現中介者接口,協調不同對象之間的交互。
  • Colleague(同事類):每個同事類都與中介者對象交互。
  • ConcreteColleague(具體同事類):實現與中介者的交互方法,處理具體業務邏輯。

? 示例:聊天室中介者

抽象中介者類

public interface ChatRoomMediator {void sendMessage(String message, User user);void addUser(User user);
}

具體中介者類

import java.util.ArrayList;
import java.util.List;public class ChatRoom implements ChatRoomMediator {private List<User> users;public ChatRoom() {this.users = new ArrayList<>();}@Overridepublic void sendMessage(String message, User user) {for (User u : users) {// 排除發送消息的用戶if (u != user) {u.receive(message);}}}@Overridepublic void addUser(User user) {this.users.add(user);}
}

同事類(用戶)

public abstract class User {protected ChatRoomMediator mediator;protected String name;public User(ChatRoomMediator mediator, String name) {this.mediator = mediator;this.name = name;}public abstract void sendMessage(String message);public abstract void receive(String message);
}

具體同事類(用戶實現)

public class ConcreteUser extends User {public ConcreteUser(ChatRoomMediator mediator, String name) {super(mediator, name);}@Overridepublic void sendMessage(String message) {System.out.println(this.name + " sending message: " + message);mediator.sendMessage(message, this);}@Overridepublic void receive(String message) {System.out.println(this.name + " received message: " + message);}
}

客戶端

public class Client {public static void main(String[] args) {ChatRoom chatRoom = new ChatRoom();User user1 = new ConcreteUser(chatRoom, "Alice");User user2 = new ConcreteUser(chatRoom, "Bob");User user3 = new ConcreteUser(chatRoom, "Charlie");chatRoom.addUser(user1);chatRoom.addUser(user2);chatRoom.addUser(user3);user1.sendMessage("Hi Bob!");user2.sendMessage("Hello Alice!");user3.sendMessage("Hey everyone!");}
}

? 優點

  • 減少了類之間的耦合:通過中介者對象來協調交互,避免了對象直接通信。
  • 集中式控制:所有的交互通過中介者控制,簡化了系統的復雜度。
  • 提高靈活性:如果要增加新的交互,只需要修改中介者,不需要改變具體的同事類。

?? 缺點

  • 中介者可能成為“上帝對象”:中介者對象可能會變得非常龐大,包含大量的邏輯,導致代碼不易維護。
  • 增加系統的復雜性:對于簡單的交互,使用中介者模式可能會引入不必要的復雜性。

🧩 使用建議

中介者模式適用于處理對象之間復雜交互的場景,尤其是當多個對象之間的關系密切并且頻繁交互時。通過中介者模式可以有效地減少類之間的直接耦合,增加系統的可維護性和擴展性。

典型應用場景包括:

  • GUI系統中組件之間的交互;
  • 多對象間的協作和消息傳遞;
  • 復雜的工作流或流程管理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78736.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78736.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78736.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Redis】基礎4:作為分布式鎖

文章目錄 1. 一些概念2. MySQL方案2.1 方案一&#xff1a;事務特性2.1.1 存在的問題2.1.2 解決方案 2.2 方案二&#xff1a;樂觀鎖2.3 方案三&#xff1a;悲觀鎖 3. Redis3.1 實現原理3.2 實現細節3.2.1 問題1&#xff1a;持有期間鎖過期問題3.2.2 問題2&#xff1a;判斷和釋放…

深度學習---框架流程

核心六步 一、數據準備 二、模型構建 三、模型訓練 四、模型驗證 五、模型優化 六、模型推理 一、數據準備&#xff1a;深度學習的基石 數據是模型的“燃料”&#xff0c;其質量直接決定模型上限。核心步驟包括&#xff1a; 1. 數據收集與標注 來源&#xff1a;公開數據集…

阿里云 OpenManus 實戰:高效AI協作體系

阿里云 OpenManus 實戰&#xff1a;高效AI協作體系 寫在最前面初體驗&#xff1a;快速部署&#xff0c;開箱即用 真實案例分享&#xff1a;從單體開發到智能良好提示詞過程展示第一步&#xff1a;為亞馬遜美國站生成商品描述第二步&#xff1a;為eBay全球站生成商品描述結果分析…

Kubernetes》》k8s》》explain查 yaml 參數

在創建json 和yaml 時&#xff0c;我們可能不知道具體的參數該怎么寫。同樣 我們可以通過explain這個 命令來查看 每個參數具體的作用與寫法 # 查看 pod類性有哪些參數 kubectl explain pod# 查看pod中 spec下面有哪些參數 kubectl explain pod.spec

從零構建Dagster分區管道:時間+類別分區實戰案例

分區是Dagster中的核心抽象概念&#xff0c;它允許我們管理大型數據集、處理增量更新并提高管道性能。本文將詳細介紹如何創建和實現基于時間和類別的分區資產。 什么是分區&#xff1f; 分區是將數據集劃分為更小、更易管理的部分的技術。在Dagster中&#xff0c;分區可以基于…

Cursor:AI時代的智能編輯器

在開發者社區掀起熱潮的Cursor&#xff0c;正以破竹之勢重塑編程工具格局。這款基于VS Code的AI優先編輯器&#xff0c;不僅延續了經典IDE的穩定基因&#xff0c;更通過深度集成的智能能力&#xff0c;將開發效率推向全新維度。2023年Anysphere公司獲得的6000萬美元A輪融資&…

SpringMVC再復習1

一、三層架構 表現層&#xff08;WEB 層&#xff09; 定義 &#xff1a;是應用程序與客戶端進行交互的最外層&#xff0c;主要負責接收用戶的請求&#xff0c;并將處理結果顯示給用戶。 作用 &#xff1a;在 Spring MVC 中&#xff0c;表現層通常采用 MVC 設計模式來構建。 技…

Centos 7系統 寶塔部署Tomcat項目(保姆級教程)

再看文章之前默認已經安裝好系統&#xff0c;可能是云系統&#xff0c;或者是虛擬機。 寶塔安裝 這個比較簡單&#xff0c;參考這個老哥的即可&#xff1a; https://blog.csdn.net/weixin_42753193/article/details/125959289 環境配置 進入寶塔面板之后會出現環境安裝&…

Nginx核心功能

目錄 一&#xff1a;基于授權的訪問控制 1&#xff1a;基于授權的訪問控制簡介 2&#xff1a;基于授權的訪問控制步驟 &#xff08;1&#xff09;使用htpasswd 生成用戶認證文件 &#xff08;2&#xff09;修改密碼文件權限為400&#xff0c;將所有者改為nginx&#xff0c;…

AnimateCC基礎教學:漫天繁星-由DeepSeek輔助完成

1.界面及元件抓圖: 2.核心代碼: // 初始化設置 var stars []; var stars2 []; var numStars 100; var stageWidth stage.canvas.width; var stageHeight stage.canvas.height; console.log(stageWidth, stageHeight);// 創建星星函數 function createStar() {var star n…

通過DeepSeek大語言模型控制panda機械臂,聽懂人話,擬人性回答。智能機械臂助手又進一步啦

文章目錄 前言環境配置運行測試報錯 前言 通過使用智能化的工作流控制系統來精確操控機械臂&#xff0c;不僅能夠基于預設算法可靠地規劃每個動作步驟的執行順序和力度&#xff0c;確保作業流程的標準化和可重復性&#xff0c;還能通過模塊化的程序設計思路靈活地在原有工作流中…

分享一款免費的 AI 工作流平臺

分享一款 AI 工作流/任務流平臺&#xff0c;通過直觀的流程圖設計&#xff0c;輕松實現復雜業務流程的自動化與可視化&#xff0c;無縫集成 AI 大模型、AI 生圖、數據庫、條件分支、并行節點、自定義任務節點等等。 效果圖&#xff1a; 官網體驗地址&#xff1a;https://www.…

前端開發本地配置 HTTPS 全面詳細教程

分為兩步&#xff1a;生成證書、本地服務配置使用證書一、HTTPS 的基本概念 HTTPS 是一種安全的 HTTP 協議&#xff0c;它通過 SSL/TLS 對數據進行加密&#xff0c;確保數據在傳輸過程中不被竊取或篡改。在前端開發中&#xff0c;某些功能&#xff08;如 Geolocation API、Web…

day10 python機器學習全流程實踐

在機器學習的實踐中&#xff0c;數據預處理與模型構建是極為關鍵的環節。本文將回顧數據預處理的全流程&#xff0c;并基于處理后的數據完成簡單的機器學習建模與評估&#xff0c;暫不涉及復雜的調參過程。 一、預處理流程回顧 機器學習的成功&#xff0c;很大程度上依賴于高…

4月28號

初認web前端: web標準: HTML:

【Linux系統】systemV共享內存

system V共享內存 在Linux系統中&#xff0c;共享內存是一種高效的進程間通信&#xff08;IPC&#xff09;機制&#xff0c;它允許兩個或者多個進程共享同一塊物理內存區域&#xff0c;這些進程可以將這塊區域映射到自己的虛擬地址空間中。 共享內存區是最快的IPC形式。一旦這…

(七)RestAPI 毛子(Http 緩存/樂觀鎖/Polly/Rate limiting/異步大文件上傳)

文章目錄 項目地址一、Http Cache1.1 服務注冊1.2 Validation with ETag1. 添加ETagMiddleware中間件2. 創建內存ETag存儲器3. 服務注冊4. 測試二、使用ETag實現樂觀鎖2.1 添加樂觀鎖方法2.2 修改Controller2.3 測試樂觀鎖三、Rate Limiting3.1 添加速率控制服務1. 在Program里…

2025.4.26_STM32_SPI

1.SPI簡介 2.硬件電路 所有SPI設備的SCK(時鐘)、MOSI(主機輸出從機輸入)、MISO(主機輸入從機輸出)分別連在一起。SCK線只能被主機控制&#xff0c;和I2C相同。 主機另外引出多條SS控制線&#xff0c;分別接到各從機的SS引腳 (SS不用的時候為高電平&#xff0c;當主機需要選中某…

JAVA:單例模式

單例模式是設計模式之一 設計模式&#xff0c;就像古代打仗&#xff0c;我們都聽過孫子兵法&#xff0c;把計謀概括下來弄成一種模式&#xff0c;形成一種套路。 軟件開發中也有很多場景&#xff0c;多數類似的問題場景&#xff0c;解決方案就形成固定的模式&#xff0c;單例…

腦機接口:重塑人類未來的神經增強革命

引言 人類對大腦的探索從未停止&#xff0c;而腦機接口&#xff08;Brain-Computer Interface, BCI&#xff09;的崛起&#xff0c;正在將科幻電影中的“意念操控”變為現實。 這項技術通過解碼腦電信號&#xff0c;實現人腦與外部設備的直接交互&#xff0c;不僅為醫療康復帶來…