欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、介紹

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

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

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

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

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

在這里插入圖片描述

二、生活中的中介模式

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

房產(chǎn)中介

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

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

線上招聘平臺

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

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

三、中介模式中的角色

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

抽象中介接口類(Mediator)

定義中介的功能。

具體中介類(MediatorImpl)

實現(xiàn)中介接口類定義的功能。在實現(xiàn)的功能邏輯中,給各個對象建立關(guān)聯(lián)關(guān)系,因此中介類中需要維護一個包含關(guā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)定義的功能。假設(shè)聯(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)點:

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

缺點:

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

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

相關(guān)文章

  • 淺談SpringMVC+Spring3+Hibernate4開發(fā)環(huán)境搭建

    淺談SpringMVC+Spring3+Hibernate4開發(fā)環(huán)境搭建

    MVC已經(jīng)是現(xiàn)代Web開發(fā)中的一個很重要的部分,本文介紹一下SpringMVC+Spring3+Hibernate4的開發(fā)環(huán)境搭建,有興趣的可以了解一下。
    2017-01-01
  • 詳解Spring工廠特性

    詳解Spring工廠特性

    今天帶大家學習Spring的特性-工廠特性,文中有非常詳細的介紹及代碼示例,對正在學習java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • java中數(shù)組的應(yīng)用及方法

    java中數(shù)組的應(yīng)用及方法

    本篇文章介紹了,java中數(shù)組的應(yīng)用及方法。需要的朋友參考下
    2013-04-04
  • 詳解Java泛型及其應(yīng)用

    詳解Java泛型及其應(yīng)用

    這篇文章主要介紹了Java泛型及其應(yīng)用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • JPA配置方式+逆向工程映射到Entity實體類

    JPA配置方式+逆向工程映射到Entity實體類

    這篇文章主要介紹了JPA配置方式+逆向工程映射到Entity實體類,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • idea新建Springboot項目,設(shè)置默認maven和jdk版本方式

    idea新建Springboot項目,設(shè)置默認maven和jdk版本方式

    這篇文章主要介紹了idea新建Springboot項目,設(shè)置默認maven和jdk版本方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java實現(xiàn)數(shù)字轉(zhuǎn)成英文的方法

    Java實現(xiàn)數(shù)字轉(zhuǎn)成英文的方法

    這篇文章主要介紹了Java實現(xiàn)數(shù)字轉(zhuǎn)成英文的方法,涉及java數(shù)組與字符串的相關(guān)操作技巧,需要的朋友可以參考下
    2015-05-05
  • 詳解Spring AOP的實現(xiàn)方式

    詳解Spring AOP的實現(xiàn)方式

    AOP是一種思想,是對某一類事情的集中處理,切面就是指某一類特定的問題,所以AOP可以理解為面向特定方法編程,這篇文章主要介紹了Spring AOP的實現(xiàn)方式,需要的朋友可以參考下
    2024-02-02
  • Java中泛型的示例詳解

    Java中泛型的示例詳解

    泛型機制在項目中一直都在使用,不僅如此,很多源碼中都用到了泛型機制。本文將通過一些示例帶大家深入了解一下Java的泛型機制,需要的可以了解一下
    2022-10-10
  • 非常適合新手學生的Java線程池超詳細分析

    非常適合新手學生的Java線程池超詳細分析

    作者是一個來自河源的大三在校生,以下筆記都是作者自學之路的一些淺薄經(jīng)驗,如有錯誤請指正,將來會不斷的完善筆記,幫助更多的Java愛好者入門
    2022-03-03

最新評論