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

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

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

介紹

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

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

在Java中, 中介者模式可以通過一個接口或抽象類來定義中介者對象,該中介者對象可以定義一些方法來處理對象之間的通信.同時,需要實(shí)現(xiàn)一些具體的對象類,這些對象類需要持有中介者對象,并且需要實(shí)現(xiàn)一些方法來與中介者對象進(jìn)行通信.通過這種方式,可以實(shí)現(xiàn)對象之間的解耦,提高代碼的可讀性和可維護(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);
        }
    }
}

抽象同事類

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);
}

具體同事類

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);
    }
}

測試

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定義了同事類之間通信的接口,具體中介者類ConcreteMediator實(shí)現(xiàn)了這個接口,并持有同事類列表.抽象同事類Colleague定義了同事類的通信接口,具體同事類ConcreteColleague1和ConcreteColleague2分別實(shí)現(xiàn)了這個接口,實(shí)現(xiàn)了具體的通信邏輯.在測試代碼中,我們創(chuàng)建了一個中介者對象,然后創(chuàng)建了兩個同事對象并將他們加入到中介者對象的同事列表中,最后測試了它們之間的通信.

總結(jié)

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

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

缺點(diǎn):

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

應(yīng)用場景:

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

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

相關(guān)文章

  • Java8 Optional的詳細(xì)使用教程

    Java8 Optional的詳細(xì)使用教程

    這篇文章主要給大家介紹了關(guān)于Java8 Optional的詳細(xì)使用教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 利用Java正則表達(dá)式校驗(yàn)郵箱與手機(jī)號

    利用Java正則表達(dá)式校驗(yàn)郵箱與手機(jī)號

    利用Java正則表達(dá)式校驗(yàn)郵箱與手機(jī)號。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • java中的HashMap多層嵌套

    java中的HashMap多層嵌套

    這篇文章主要介紹了java中的HashMap多層嵌套問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • SpringMVC攔截器快速掌握上篇

    SpringMVC攔截器快速掌握上篇

    攔截器(Interceptor)是一種動態(tài)攔截方法調(diào)用的機(jī)制,在SpringMVC中動態(tài)攔截控制器方法的執(zhí)行。本文將詳細(xì)講講SpringMVC中攔截器的概念及入門案例,感興趣的可以嘗試一下
    2022-08-08
  • Java 在線考試云平臺的實(shí)現(xiàn)

    Java 在線考試云平臺的實(shí)現(xiàn)

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+vue+springboot+mysql+maven實(shí)現(xiàn)一個前端vue后臺java微服務(wù)的在線考試系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • 詳解Java打包鏡像部署

    詳解Java打包鏡像部署

    這篇文章主要介紹了Java打包鏡像部署,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • JavaWeb 中Cookie實(shí)現(xiàn)記住密碼的功能示例

    JavaWeb 中Cookie實(shí)現(xiàn)記住密碼的功能示例

    cookie是一種WEB服務(wù)器通過瀏覽器在訪問者的硬盤上存儲信息的手段。Cookie的目的就是為用戶帶來方便,為網(wǎng)站帶來增值。這篇文章主要介紹了JavaWeb 中Cookie實(shí)現(xiàn)記住密碼的功能示例,需要的朋友可以參考下
    2017-06-06
  • JavaWeb表單注冊界面的實(shí)現(xiàn)方法

    JavaWeb表單注冊界面的實(shí)現(xiàn)方法

    這篇文章主要介紹了JavaWeb表單注冊界面的實(shí)現(xiàn)方法的相關(guān)資料,希望通過本文大家能掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • java中Class.forName方法的作用詳解

    java中Class.forName方法的作用詳解

    Class.forName(xxx.xx.xx) 返回的是一個類,但Class.forName方法的作用到底是什么終?下面這篇文章就來給大家詳細(xì)介紹了關(guān)于java中Class.forName方法的作用,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-06-06
  • RocketMq深入分析講解兩種削峰方式

    RocketMq深入分析講解兩種削峰方式

    當(dāng)上游調(diào)用下游服務(wù)速率高于下游服務(wù)接口QPS時,那么如果不對調(diào)用速率進(jìn)行控制,那么會發(fā)生很多失敗請求,通過消息隊(duì)列的削峰方法有兩種,這篇文章主要介紹了RocketMq深入分析講解兩種削峰方式
    2023-01-01

最新評論