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

Java設(shè)計(jì)模式之中介模式

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

一、介紹

中介模式(Mediator Pattern),屬于行為型設(shè)計(jì)模式。目的是把系統(tǒng)中對(duì)象之間的調(diào)用關(guān)系從一對(duì)多轉(zhuǎn)變成一對(duì)一的調(diào)用關(guān)系,以此來(lái)降低多個(gè)對(duì)象和類之間的通信復(fù)雜性。

在很多情況下,一個(gè)類中對(duì)象于對(duì)象之間的調(diào)用往往很容易形成網(wǎng)狀結(jié)構(gòu),此時(shí)倘若一個(gè)對(duì)象發(fā)生改變,那么將會(huì)導(dǎo)致其他所有與之關(guān)聯(lián)的對(duì)象進(jìn)行修改,從而導(dǎo)致系統(tǒng)復(fù)雜性增加,且難以維護(hù)。

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

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

使用下面圖示可能會(huì)更好的進(jìn)行表達(dá)

在這里插入圖片描述

二、生活中的中介模式

在我們?nèi)粘I钪?,處處存在中介模式的影子?/p>

房產(chǎn)中介

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

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

線上招聘平臺(tái)

在沒有線上招聘平臺(tái)的情況下,我們要找一家公司應(yīng)聘是一件十分麻煩的事情,要么親自帶著簡(jiǎn)歷去公司詢問是否招聘某崗位(可能因?yàn)椴徽腥硕着芤惶?,要么在網(wǎng)上查找各個(gè)公司的官網(wǎng)招聘頁(yè)以郵箱的形式投遞簡(jiǎn)歷,但甚至很多小公司都沒有官網(wǎng);

有了線上招聘平臺(tái)后,應(yīng)聘者直接在平臺(tái)上聯(lián)系各個(gè)公司就好了,通過該平臺(tái),應(yīng)聘者不僅可以看到各種大中小公司,還不會(huì)因?yàn)楣菊衅噶鞒痰母淖兌苡绊?,因?yàn)閼?yīng)聘者在平臺(tái)上的操作都是一樣的。

三、中介模式中的角色

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

抽象中介接口類(Mediator)

定義中介的功能。

具體中介類(MediatorImpl)

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

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

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

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

實(shí)現(xiàn)各個(gè)對(duì)象的功能。

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

在這里插入圖片描述

四、案例演示

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

1. 角色分析

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

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

public interface Friend {

    void receiveMessage(String message);
}

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

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

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)

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

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

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

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

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)

新建一個(gè)客戶端類對(duì)該案例進(jìn)行演示

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ùn)行該代碼后得到以下輸出

在這里插入圖片描述

五、優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  • 通過引入中介類,將對(duì)象之間的關(guān)系從一對(duì)多變成了一對(duì)一
  • 將各個(gè)類進(jìn)行解耦

缺點(diǎn):

對(duì)客戶端的代碼維護(hù),轉(zhuǎn)變?yōu)閷?duì)中介類的維護(hù),中介類變得龐大時(shí)也將同樣難以維護(hù)。

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

相關(guān)文章

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

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

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

    簡(jiǎn)單聊聊Java程序中的換行符

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

    詳解如何為SpringBoot Web應(yīng)用的日志方便追蹤

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

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

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

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

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

    SpringBoot實(shí)現(xiàn)動(dòng)態(tài)多線程并發(fā)定時(shí)任務(wù)

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

    使用idea連接瀏覽器進(jìn)行訪問過程

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

    druid連接泄露故障全面分析

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

    Spring中@PathVariable注解的簡(jiǎn)單使用

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

    java去除if...else的七種方法總結(jié)

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

最新評(píng)論

石河子市| 丰镇市| 安仁县| 定陶县| 东乡族自治县| 浪卡子县| 安庆市| 汽车| 枣阳市| 金沙县| 茶陵县| 沈丘县| 铁力市| 比如县| 遂昌县| 定陶县| 岑溪市| 犍为县| 稻城县| 明水县| 寻乌县| 许昌市| 三穗县| 宜川县| 栾城县| 积石山| 阿巴嘎旗| 太康县| 青冈县| 游戏| 泸水县| 枣阳市| 突泉县| 西林县| 福鼎市| 德昌县| 阿尔山市| 都兰县| 道孚县| 台东市| 阳东县|