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

Java設(shè)計(jì)模式之中介者模式的實(shí)現(xiàn)方式

 更新時(shí)間:2023年04月26日 11:36:53   作者:.番茄炒蛋  
Java中介者模式是一種行為型設(shè)計(jì)模式,它通過(guò)一個(gè)中介者對(duì)象來(lái)協(xié)調(diào)多個(gè)對(duì)象之間的交互,降低對(duì)象之間的耦合度,提高系統(tǒng)的可維護(hù)性和可擴(kuò)展性。本文將介紹該設(shè)計(jì)模式的原理、使用場(chǎng)景和實(shí)現(xiàn)方法

介紹

Java中介者模式(Mediator Pattern)是一種行為設(shè)計(jì)模式,它可以降低多個(gè)對(duì)象之間的耦合性,通過(guò)一個(gè)中介者對(duì)象來(lái)協(xié)調(diào)這些對(duì)象的交互.

在中介者模式中,多個(gè)對(duì)象之間的交互不是直接進(jìn)行的,而是通過(guò)一個(gè)中介者對(duì)象來(lái)進(jìn)行的.這個(gè)中介者對(duì)象封裝了對(duì)象之間的交互邏輯,每個(gè)對(duì)象只需要與中介者對(duì)象進(jìn)行通信,而不需要與其他對(duì)象直接進(jìn)行通信.這種模式可以有效的減少代碼的復(fù)雜度和維護(hù)成本,提高系統(tǒng)的可擴(kuò)展性和可維護(hù)性.

在Java中, 中介者模式可以通過(guò)一個(gè)接口或抽象類(lèi)來(lái)定義中介者對(duì)象,該中介者對(duì)象可以定義一些方法來(lái)處理對(duì)象之間的通信.同時(shí),需要實(shí)現(xiàn)一些具體的對(duì)象類(lèi),這些對(duì)象類(lèi)需要持有中介者對(duì)象,并且需要實(shí)現(xiàn)一些方法來(lái)與中介者對(duì)象進(jìn)行通信.通過(guò)這種方式,可以實(shí)現(xiàn)對(duì)象之間的解耦,提高代碼的可讀性和可維護(hù)性.

實(shí)現(xiàn)

抽象中介者

public abstract class Mediator {
    public abstract void send(String message, Colleague colleague);
}

具體中介者

public class ConcreteMediator extends Mediator{
    private ConcreteColleague1 concreteColleague1;
    private ConcreteColleague2 concreteColleague2;
    public void setConcreteColleague1(ConcreteColleague1 concreteColleague1) {
        this.concreteColleague1 = concreteColleague1;
    }
    public void setConcreteColleague2(ConcreteColleague2 concreteColleague2) {
        this.concreteColleague2 = concreteColleague2;
    }
    @Override
    public void send(String message, Colleague colleague) {
        if (colleague == concreteColleague1){
            concreteColleague2.receive(message);
        }else {
            concreteColleague1.receive(message);
        }
    }
}

抽象同事類(lèi)

public abstract class Colleague {
    protected Mediator mediator;
    public Colleague(Mediator mediator) {
        this.mediator = mediator;
    }
    /**
     * 發(fā)送消息
     *
     * @param message
     */
    public abstract void send(String message);
    /**
     * 消費(fèi)消息
     * @param message
     */
    public abstract void receive(String message);
}

具體同事類(lèi)

public class ConcreteColleague1 extends Colleague {
    public ConcreteColleague1(Mediator mediator) {
        super(mediator);
    }
    /**
     * 發(fā)送消息
     *
     * @param message
     */
    @Override
    public void send(String message) {
        mediator.send(message, this);
    }
    /**
     * 消費(fèi)消息
     *
     * @param message
     */
    @Override
    public void receive(String message) {
        System.out.println("concreteColleague1收到消息:" + message);
    }
}
public class ConcreteColleague2 extends Colleague {
    public ConcreteColleague2(Mediator mediator) {
        super(mediator);
    }
    /**
     * 發(fā)送消息
     *
     * @param message
     */
    @Override
    public void send(String message) {
        mediator.send(message, this);
    }
    /**
     * 消費(fèi)消息
     *
     * @param message
     */
    @Override
    public void receive(String message) {
        System.out.println("concreteColleague2收到消息:" + message);
    }
}

測(cè)試

public class Demo {
    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();
        ConcreteColleague1 concreteColleague1 = new ConcreteColleague1(mediator);
        ConcreteColleague2 concreteColleague2 = new ConcreteColleague2(mediator);
        mediator.setConcreteColleague1(concreteColleague1);
        mediator.setConcreteColleague2(concreteColleague2);
        concreteColleague1.send("Hello concreteColleague2");
        concreteColleague2.send("Hello concreteColleague1");
    }
}

在上面代碼中,抽象中介者M(jìn)ediator定義了同事類(lèi)之間通信的接口,具體中介者類(lèi)ConcreteMediator實(shí)現(xiàn)了這個(gè)接口,并持有同事類(lèi)列表.抽象同事類(lèi)Colleague定義了同事類(lèi)的通信接口,具體同事類(lèi)ConcreteColleague1和ConcreteColleague2分別實(shí)現(xiàn)了這個(gè)接口,實(shí)現(xiàn)了具體的通信邏輯.在測(cè)試代碼中,我們創(chuàng)建了一個(gè)中介者對(duì)象,然后創(chuàng)建了兩個(gè)同事對(duì)象并將他們加入到中介者對(duì)象的同事列表中,最后測(cè)試了它們之間的通信.

總結(jié)

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

  • 降低了對(duì)象之間的耦合度,是的它們更加容易被獨(dú)立地修改,測(cè)試和維護(hù).
  • 通過(guò)集中管理和協(xié)調(diào)對(duì)象之間的交互,可以更加靈活地?cái)U(kuò)展和修改系統(tǒng),而不會(huì)對(duì)其他部分造成影響
  • 可以使得代碼更加清晰易懂,因?yàn)樗袑?duì)象之間的交互都被集中在中介者對(duì)象中進(jìn)行處理.

缺點(diǎn):

  • 中介者對(duì)象需要處理多個(gè)對(duì)象之間的交互,因此其復(fù)雜度可能較高,需要仔細(xì)設(shè)計(jì)和實(shí)現(xiàn).
  • 如果設(shè)計(jì)不當(dāng),中介者對(duì)象可能會(huì)成為系統(tǒng)的瓶頸,降低系統(tǒng)的性能和響應(yīng)速度.

應(yīng)用場(chǎng)景:

  • 當(dāng)多個(gè)對(duì)象之間存在復(fù)雜的交互關(guān)系,且彼此之間的耦合度較高時(shí),可以考慮使用中介者模式進(jìn)行重構(gòu).
  • 當(dāng)系統(tǒng)中存在大量的對(duì)象,而且它們之間的交互關(guān)系錯(cuò)綜復(fù)雜時(shí),可以考慮使用中介者模式進(jìn)行簡(jiǎn)化和優(yōu)化.
  • 當(dāng)需要再不影響其他部分的情況下擴(kuò)展和修改系統(tǒng)時(shí),可以使用中介者模式來(lái)實(shí)現(xiàn)系統(tǒng)的靈活性和可擴(kuò)展性.

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

相關(guān)文章

  • java8 streamList轉(zhuǎn)換使用詳解

    java8 streamList轉(zhuǎn)換使用詳解

    這篇文章主要介紹了java8 streamList轉(zhuǎn)換使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • mybatis-plus自帶QueryWrapper自定義sql實(shí)現(xiàn)復(fù)雜查詢(xún)實(shí)例詳解

    mybatis-plus自帶QueryWrapper自定義sql實(shí)現(xiàn)復(fù)雜查詢(xún)實(shí)例詳解

    MyBatis-Plus是一個(gè)MyBatis(opens new window)的增強(qiáng)工具,在 MyBatis的基礎(chǔ)上只做增強(qiáng)不做改變,MyBatis可以無(wú)損升級(jí)為MyBatis-Plus,這篇文章主要給大家介紹了關(guān)于mybatis-plus自帶QueryWrapper自定義sql實(shí)現(xiàn)復(fù)雜查詢(xún)的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • Java常用工具類(lèi)匯總 附示例代碼

    Java常用工具類(lèi)匯總 附示例代碼

    這篇文章主要介紹了Java常用工具類(lèi),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著我來(lái)一起學(xué)習(xí)學(xué)習(xí)吧,希望能給你帶來(lái)幫助
    2021-06-06
  • 深入了解Spring的事務(wù)傳播機(jī)制

    深入了解Spring的事務(wù)傳播機(jī)制

    Spring事務(wù)傳播機(jī)制是指,包含多個(gè)事務(wù)的方法在相互調(diào)用時(shí),事務(wù)是如何在這些方法間傳播的。本文通過(guò)示例詳細(xì)介紹了Spring的事務(wù)傳播機(jī)制,需要的可以參考一下
    2022-09-09
  • springboot maven 項(xiàng)目打包jar 最后名稱(chēng)自定義的教程

    springboot maven 項(xiàng)目打包jar 最后名稱(chēng)自定義的教程

    這篇文章主要介紹了springboot maven 項(xiàng)目打包jar 最后名稱(chēng)自定義的教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • 淺談SpringCloud的微服務(wù)架構(gòu)組件

    淺談SpringCloud的微服務(wù)架構(gòu)組件

    這篇文章主要介紹了淺談SpringCloud的微服務(wù)架構(gòu)組件,Spring Cloud根據(jù)分布式服務(wù)協(xié)調(diào)治理的需求成立了許多子項(xiàng)目,每個(gè)項(xiàng)目通過(guò)特定的組件去實(shí)現(xiàn),需要的朋友可以參考下
    2023-04-04
  • springboot圖片驗(yàn)證碼功能模塊

    springboot圖片驗(yàn)證碼功能模塊

    用戶登錄幾乎是一個(gè)線上系統(tǒng)必不可少且使用相對(duì)比較頻繁的一個(gè)模塊,為了防止惡意暴力嘗試,防止洪水攻擊、防止腳本自動(dòng)提交等,驗(yàn)證碼是一個(gè)較為便捷且行之有效的預(yù)防手段,這篇文章主要介紹了springboot圖片驗(yàn)證碼功能模塊,需要的朋友可以參考下
    2022-04-04
  • Spring Boot高效數(shù)據(jù)聚合之道深入講解

    Spring Boot高效數(shù)據(jù)聚合之道深入講解

    這篇文章主要給大家介紹了關(guān)于Spring Boot高效數(shù)據(jù)聚合之道的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • spring boot 配置動(dòng)態(tài)刷新詳解

    spring boot 配置動(dòng)態(tài)刷新詳解

    這篇文章主要介紹了spring boot 配置動(dòng)態(tài)刷新實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Maven deploy plugin使用方式

    Maven deploy plugin使用方式

    這篇文章主要介紹了Maven deploy plugin使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評(píng)論

开鲁县| 明水县| 宜黄县| 淳安县| 东丰县| 行唐县| 潼关县| 清原| 鹤山市| 友谊县| 加查县| 乳山市| 鄂托克旗| 合山市| 丰台区| 武安市| 姜堰市| 朔州市| 南充市| 孝昌县| 新竹市| 屯昌县| 古田县| 宝山区| 托里县| 平阴县| 新疆| 兴义市| 九寨沟县| 竹北市| 晋中市| 凯里市| 盐边县| 化隆| 永清县| 垦利县| 株洲市| 凌云县| 来宾市| 三都| 昭平县|