最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設計模式之中介模式

 更新時間:2023年12月29日 10:11:39   作者:理想萬歲萬萬歲  
這篇文章主要介紹了Java設計模式之中介模式,中介模式(Mediator?Pattern),屬于行為型設計模式,目的是把系統(tǒng)中對象之間的調用關系從一對多轉變成一對一的調用關系,以此來降低多個對象和類之間的通信復雜性,需要的朋友可以參考下

一、介紹

中介模式(Mediator Pattern),屬于行為型設計模式。目的是把系統(tǒng)中對象之間的調用關系從一對多轉變成一對一的調用關系,以此來降低多個對象和類之間的通信復雜性。

在很多情況下,一個類中對象于對象之間的調用往往很容易形成網狀結構,此時倘若一個對象發(fā)生改變,那么將會導致其他所有與之關聯(lián)的對象進行修改,從而導致系統(tǒng)復雜性增加,且難以維護。

使用中介模式,可以通過向系統(tǒng)中引入中介類,將這種網狀結構改為星型結構,各個對象直接不直接關聯(lián)而是通過該中介類進行交互,當一個對象發(fā)生改變時,只需要在中介類中做出相應的修改即可,其他對象對此變化是無感的。

用一個中介對象來封裝一系列的對象交互。中介者使各個對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。

使用下面圖示可能會更好的進行表達

在這里插入圖片描述

二、生活中的中介模式

在我們日常生活中,處處存在中介模式的影子。

房產中介

如果沒有房產中介,我們需要親自聯(lián)系各個房東約其看房,既浪費自己的時間也浪費各個房東的時間;

有了房產中介,我們只需要聯(lián)系中介小哥就行了,中介小哥有各個房東的鑰匙,直接看房,十分方便。

線上招聘平臺

在沒有線上招聘平臺的情況下,我們要找一家公司應聘是一件十分麻煩的事情,要么親自帶著簡歷去公司詢問是否招聘某崗位(可能因為不招人而白跑一趟),要么在網上查找各個公司的官網招聘頁以郵箱的形式投遞簡歷,但甚至很多小公司都沒有官網;

有了線上招聘平臺后,應聘者直接在平臺上聯(lián)系各個公司就好了,通過該平臺,應聘者不僅可以看到各種大中小公司,還不會因為公司招聘流程的改變而受影響,因為應聘者在平臺上的操作都是一樣的。

三、中介模式中的角色

在中介模式中,最重要的角色就是**中介角色(Mediator )**了,它用于在系統(tǒng)中各個對象之間建立關聯(lián)關系。

抽象中介接口類(Mediator)

定義中介的功能。

具體中介類(MediatorImpl)

實現(xiàn)中介接口類定義的功能。在實現(xiàn)的功能邏輯中,給各個對象建立關聯(lián)關系,因此中介類中需要維護一個包含關聯(lián)的各個組件的集合并對該集合進行維護。

系統(tǒng)組件抽象接口類(Component)

定義系統(tǒng)中各個對象的功能。

系統(tǒng)組件具體實現(xiàn)類(AComponent、BComponent、CComponent)

實現(xiàn)各個對象的功能。

通過對中介模式中各個角色的分析,可得其通用UM圖如下所示

在這里插入圖片描述

四、案例演示

群發(fā)消息為例,每當我們在重大傳統(tǒng)節(jié)日時,許多人喜歡使用短信群發(fā)的形式,將節(jié)日祝福一次性群發(fā)給他的親朋好友們。這是一個非常好的案例,在沒有群發(fā)功能的時候,我們想好一段祝福語后,需要一個接一個地對通訊錄中的朋友進行發(fā)送短信(一對多);而后來有了群發(fā)功能后,我們選擇群發(fā)功能,將親朋好友都添加到這個功能中作為群發(fā)聯(lián)系人,然后點擊發(fā)送短信就可以將祝福發(fā)送給所有人了(一對一)。此時群發(fā)功能就相當于中介

1. 角色分析

聯(lián)系人接口(Friend)

定義聯(lián)系人的功能。在節(jié)日祝福中,我們通訊錄中的聯(lián)系人有個接收短信功能receiveMessage()就夠了。

public interface Friend {

    void receiveMessage(String message);
}

具體聯(lián)系人(FriendImpl)

實現(xiàn)聯(lián)系人接口(Friend)定義的功能。假設聯(lián)系人有三個:父親、母親、姐姐。

public class Father implements Friend{
    @Override
    public void receiveMessage(String message) {
        System.out.println("父親收到短信:" + message);
    }
}
public class Mother implements Friend{
    @Override
    public void receiveMessage(String message) {
        System.out.println("母親收到短信:" + message);
    }
}
public class Sister implements Friend{
    @Override
    public void receiveMessage(String message) {
        System.out.println("姐姐收到短信:" + message);
    }
}

抽象群發(fā)接口(SendGroup)

定義一個發(fā)送功能send(),以及對群發(fā)目標聯(lián)系人的維護功能addFriend()、removeFriend()。

public interface SendGroup {
    void addFriend(Friend friend);
    void removeFriend(Friend friend);
    void send(String message);
}

具體群發(fā)中介類(SendGroupImpl)

實現(xiàn)抽象群發(fā)接口SendGroup定義的功能。前面分析中說過,中介類中需要維護一個包含所有聯(lián)系人的集合并對其進行維護。

public class SendGroupImpl implements SendGroup{
    private final List<Friend> friendList = new ArrayList<>();
    @Override
    public void addFriend(Friend friend) {
        if (!friendList.contains(friend)) {
            friendList.add(friend);
        }
    }
    @Override
    public void removeFriend(Friend friend) {
        friendList.remove(friend);
    }
    @Override
    public void send(String message) {
        for (Friend friend : friendList) {
            friend.receiveMessage(message);
        }
    }
}

客戶端(MediatorClient)

新建一個客戶端類對該案例進行演示

public class MediatorClient {
    public static void main(String[] args) {
        Friend father = new Father();
        Friend mother = new Mother();
        Friend sister = new Sister();
        // 選擇需要群發(fā)短信的聯(lián)系人
        SendGroup sendGroup = new SendGroupImpl();
        sendGroup.addFriend(father);
        sendGroup.addFriend(mother);
        sendGroup.addFriend(sister);
        // 群發(fā)短信
        sendGroup.send("新年快樂");
    }
}

運行該代碼后得到以下輸出

在這里插入圖片描述

五、優(yōu)缺點

優(yōu)點:

  • 通過引入中介類,將對象之間的關系從一對多變成了一對一
  • 將各個類進行解耦

缺點:

對客戶端的代碼維護,轉變?yōu)閷χ薪轭惖木S護,中介類變得龐大時也將同樣難以維護。

到此這篇關于Java設計模式之中介模式的文章就介紹到這了,更多相關Java中介模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • spring無法讀取properties文件數(shù)據(jù)問題詳解

    spring無法讀取properties文件數(shù)據(jù)問題詳解

    這篇文章主要介紹了spring無法讀取properties文件數(shù)據(jù)問題詳解,需要的朋友可以參考下
    2020-02-02
  • 簡單聊聊Java程序中的換行符

    簡單聊聊Java程序中的換行符

    Java程序中的換行符一般使用“\n”表示,它是一個轉義字符,表示換行符。根據(jù)操作系統(tǒng)的不同,換行符的實際表示可能不同,本文就來簡單聊聊他們的區(qū)別與使用吧
    2023-03-03
  • 詳解如何為SpringBoot Web應用的日志方便追蹤

    詳解如何為SpringBoot Web應用的日志方便追蹤

    在Web應用程序領域,有效的請求監(jiān)控和可追溯性對于維護系統(tǒng)完整性和診斷問題至關重要,SpringBoot是一種用于構建Java應用程序的流行框架,在本文中,我們探討了在SpringBoot中向日志添加唯一ID的重要性,需要的朋友可以參考下
    2023-11-11
  • springboot schedule 解決定時任務不執(zhí)行的問題

    springboot schedule 解決定時任務不執(zhí)行的問題

    這篇文章主要介紹了springboot schedule 解決定時任務不執(zhí)行的問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Ubuntu 使用Jni開發(fā)實例詳解

    Ubuntu 使用Jni開發(fā)實例詳解

    這篇文章主要介紹了Ubuntu 使用Jni開發(fā)實例詳解的相關資料,需要的朋友可以參考下
    2016-10-10
  • SpringBoot實現(xiàn)動態(tài)多線程并發(fā)定時任務

    SpringBoot實現(xiàn)動態(tài)多線程并發(fā)定時任務

    這篇文章主要為大家詳細介紹了SpringBoot實現(xiàn)動態(tài)多線程并發(fā)定時任務,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 使用idea連接瀏覽器進行訪問過程

    使用idea連接瀏覽器進行訪問過程

    配置IDEA WebBrowsers路徑:打開IDEA,進入File→Setting,搜索Web,設置瀏覽器絕對路徑至ProgramFiles或ProgramFiles(x86)(根據(jù)程序位數(shù)),復制路徑解決訪問問題
    2025-09-09
  • druid連接泄露故障全面分析

    druid連接泄露故障全面分析

    這篇文章主要介紹了druid連接泄露故障全面分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring中@PathVariable注解的簡單使用

    Spring中@PathVariable注解的簡單使用

    這篇文章主要介紹了Spring中@PathVariable注解的簡單使用,@PathVariable 是 Spring Framework 中的注解之一,用于處理 RESTful Web 服務中的 URL 路徑參數(shù),它的作用是將 URL 中的路徑變量綁定到方法的參數(shù)上,需要的朋友可以參考下
    2024-01-01
  • java去除if...else的七種方法總結

    java去除if...else的七種方法總結

    相信小伙伴一定看過多篇怎么去掉?if...else?的文章,也知道大家都很有心得,知道多種方法來去掉?if...else?,本文為大家整理了7個常用的方法,希望對大家有所幫助
    2023-11-11

最新評論

饶河县| 建始县| 阳山县| 茌平县| 连云港市| 望都县| 丰都县| 邮箱| 安庆市| 瑞丽市| 连云港市| 德昌县| 玉溪市| 尖扎县| 仙居县| 长宁区| 新宁县| 米泉市| 安徽省| 高碑店市| 汤原县| 青阳县| 锡林郭勒盟| 通城县| 临邑县| 利津县| 嵊泗县| 河北区| 灵丘县| 清镇市| 滕州市| 科技| 措美县| 册亨县| 怀远县| 洪洞县| 日土县| 周宁县| 清原| 唐海县| 沾益县|