【设计模式】中介者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
文章目錄
- 一、中介者模式簡介
- 二、中介者模式適用場景
- 三、中介者模式優(yōu)缺點
- 四、中介者模式 與 觀察者模式
- 五、中介者模式 代碼示例
- 1、聊天室
- 2、用戶
- 3、運行實例
一、中介者模式簡介
中介者模式 : 定義 一個 封裝一組對象 如何 交互 的 對象 ;
通過使 對象 明確地 相互引用 , 促進 松散耦合 , 允許 獨立改變 它們之間的 交互 ;
中介者模式類型 : 行為型 ;
二、中介者模式適用場景
中介者模式適用場景 :
- 引用關(guān)系復(fù)雜 : 系統(tǒng)中 對象之間 存在 復(fù)雜的 引用關(guān)系 , 產(chǎn)生的 相互依賴關(guān)系 結(jié)構(gòu)混亂 , 難以理解 ;
- 改變行為 : 交互的 公共行為 , 如果 需要 改變行為 , 可以 增加新的 中介者 類 ; ( 通過增加新的中介者類 , 達到擴展的目的 )
多人聊天室 就是一個 中介者模式 場景 , 一個人發(fā)言時 , 需要傳達給每個人 , 如果沒有聊天室 , 需要對每個人都說一遍 , 如果有中介者 , 就由中介者負(fù)責(zé)將發(fā)言傳達給每個人 ;
三、中介者模式優(yōu)缺點
中介者模式優(yōu)點 :
-
降低復(fù)雜度 : 將 一對多 轉(zhuǎn)化為 一對一 , 降低了 程序復(fù)雜程度 ;
如 : 聊天室中有 888 個人 , 如果要一對一進行交互 , 需要交互 777 次 ; 使用了中介者模式后 , 變成一對一 , 只要將交互內(nèi)容交給中介者就可以了 , 中介者負(fù)責(zé)與其余 777 人進行交互 ; -
解耦 : 實現(xiàn)了 類之間的解耦 操作 ;
如 : 聊天室中有 888 個人 , 每個人都需要耦合另外 777 個 , 即持有另外 777 個對象 , 使用了中介者模式之后 , 888 個人只需要持有 中介者 對象即可 , 888 個人之間不再進行相互耦合 ;
中介者模式缺點 : 如果在 業(yè)務(wù)場景 中 中介者 數(shù)量過多 , 會導(dǎo)致系統(tǒng) 復(fù)雜性增加 ;
( 設(shè)計模式之間 , 也是一個相互平衡的過程 )
四、中介者模式 與 觀察者模式
中介者模式 與 觀察者模式 :
這兩個模式經(jīng)常 結(jié)合起來使用 , 使用 觀察者模式 實現(xiàn) 中介者模式 中 , 角色間的通信 ;
五、中介者模式 代碼示例
業(yè)務(wù)場景 : 聊天室 , 多人在聊天室中聊天 ;
聊天室 實例 只有一個 , 用戶可以創(chuàng)建多個 , 并持有 聊天室 引用 ;
1、聊天室
package mediator;/*** 聊天室 , 中介者模式中的中介者* 該類實例在整個業(yè)務(wù)場景中只有一個*/ public class ChatRoom {public static void showMessage(User user, String message){System.out.println(user.getName() + " : " + message);} }
2、用戶
package mediator;/*** 中介者模式中 與 中介者 交互的對象* 該類實例對象 , 需要創(chuàng)建多個*/ public class User {private String name;public User(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}/*** 主要業(yè)務(wù)邏輯 , 群聊時發(fā)送消息* @param message*/public void sendMessage(String message) {ChatRoom.showMessage(this, message);} }
3、運行實例
package mediator;public class Main {public static void main(String[] args) {User tom = new User("Tom");User jerry = new User("Jerry");User trump = new User("Trump");tom.sendMessage("I'm cat");jerry.sendMessage("I'm mouse");trump.sendMessage("MAGA");} }
總結(jié)
以上是生活随笔為你收集整理的【设计模式】中介者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【设计模式】状态模式 ( 简介 | 适用
- 下一篇: 【设计模式】命令模式 ( 简介 | 适用