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

深入理解Java設(shè)計模式之中介者模式

 更新時間:2021年11月05日 15:22:23   作者:一指流砂~  
這篇文章主要介紹了JAVA設(shè)計模式之中介者模式的的相關(guān)資料,文中示例代碼非常詳細,供大家參考和學(xué)習(xí),感興趣的朋友可以了解

一、什么是中介者模式

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

中介者作為一種行為設(shè)計模式,它公開一個統(tǒng)一的接口,系統(tǒng)的不同對象或組件可以通過該接口進行通信。增加一個中介者對象后,所有的相關(guān)對象通過中介者對象來通信,而不是互相引用,所以當(dāng)一個對象發(fā)生改變時,只需要通知中介者對象即可。

二、中介者模式的結(jié)構(gòu)

Mediator:中介者接口。在里面定義各個同事之間交互需要的方法,可以是公共的通訊方法,比如changed方法,大家都用,也可以是小范圍的交互方法。

ConcreteMediator:具體中介者實現(xiàn)對象。它需要了解并維護各個同事對象,并負(fù)責(zé)具體的協(xié)調(diào)各同事對象的交互關(guān)系。

Colleague:同事類的定義,通常實現(xiàn)成為抽象類,主要負(fù)責(zé)約束同事對象的類型,并實現(xiàn)一些具體同事類之間的公共功能,比如:每個具體同事類都應(yīng)該知道中介者對象,也就是具體同事類都會持有中介者對象,就可以定義到這個類里面。

ConcreteColleague:具體的同事類,實現(xiàn)自己的業(yè)務(wù),在需要與其它同事通訊的時候,就與持有的中介者通信,中介者會負(fù)責(zé)與其它的同事交互。

三、中介者模式的優(yōu)缺點

優(yōu)點: 減少各個Colleague之間的耦合,使得可以獨立地改變和復(fù)用各個Colleague類和Mediator

缺點:中介者模式的缺點是顯而易見的,因為這個“中介“承擔(dān)了較多的責(zé)任,所以一旦這個中介對象出現(xiàn)了問題,那么整個系統(tǒng)就會受到重大的影響。

四、中介者模式的使用場景

1. 一組定義良好的對象,現(xiàn)在要進行復(fù)雜的通信。

2. 定制一個分布在多個類中的行為,而又不想生成太多的子類。

可以看出,中介對象主要是用來封裝行為的,行為的參與者就是那些對象,但是通過中介者,這些對象不用相互知道。

五、中介者模式與發(fā)布/訂閱模式的異同

1. 中介者模式與業(yè)務(wù)相關(guān),訂閱/發(fā)布模式與業(yè)務(wù)無關(guān)。

2. 兩個模式都有集中調(diào)度效果,對象之間不直接參與通信。

六、中介者模式的實現(xiàn)

安理會做中介

聯(lián)合國機構(gòu)類--Mediator類

//聯(lián)合國機構(gòu)
abstract class UnitedNations
{
    //聲明
    public abstract void Declare(string message, Country colleague);
}

國家類--Colleague類

//國家
abstract class Country
{
    protected UnitedNations mediator;
    public Country(UnitedNations mediator)
    {
        this.mediator = mediator;
    }
}

美國類--ConcreteColleague類

//美國
class USA : Country
{
    public USA(UnitedNations mediator) : base(mediator)
    {
    }
    //聲明
    public void Declare(string message)
    {
        mediator.Declare(message, this);
    }
    //獲取消息
    public void GetMessage(string message)
    {
        Console.WriteLine("美國獲得對方消息:" + message);
    }
}

伊拉克類--ConcreteColleague類

//伊拉克
class Iraq : Country
{
    public Iraq(UnitedNations mediator) : base(mediator)
    {
    }
    //聲明
    public void Declare(string message)
    {
        mediator.Declare(message, this);
    }
    //獲取消息
    public void GetMessage(string message)
    {
        Console.WriteLine("伊拉克獲得對方消息:" + message);
    }
}

聯(lián)合國安理會--ConcreteMediator類

//聯(lián)合國安全理事會
class UnitedNationsSecurity : UnitedNations
{
    private USA colleague1;
    private Iraq colleague2;
    //美國
    public USA Colleague1 { set { colleague1 = value; } }
    //伊拉克
    public Iraq Colleague2 { set { colleague2 = value; } }
    public override void Declare(string message, Country colleague)
    {
        if (colleague == colleague1)
        {
            colleague2.GetMessage(message);
        }
        else
        {
            colleague1.GetMessage(message);
        }
    }
}

客戶端代碼

class Program
{
    //客戶端代碼
    static void Main(string[] args)
    {
        UnitedNationsSecurity UNSC = new UnitedNationsSecurity();
        USA c1 = new USA(UNSC);
        Iraq c2 = new Iraq(UNSC);
        UNSC.Colleague1 = c1;
        UNSC.Colleague2 = c2;
        c1.Declare("不準(zhǔn)研發(fā)核武器,否則開戰(zhàn)");
        c2.Declare("沒研發(fā),開戰(zhàn)就開戰(zhàn)");
        Console.Read();
    }
}

結(jié)果

伊拉克獲得對方消息:不準(zhǔn)研發(fā)核武器,否則開戰(zhàn)
美國獲得對方消息:沒研發(fā),開戰(zhàn)就開戰(zhàn)

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Mybatis返回類型為Map時遇到的類型轉(zhuǎn)化的異常問題

    Mybatis返回類型為Map時遇到的類型轉(zhuǎn)化的異常問題

    這篇文章主要介紹了Mybatis返回類型為Map時遇到的類型轉(zhuǎn)化的異常問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java springmvc實現(xiàn)驗證碼功能

    java springmvc實現(xiàn)驗證碼功能

    這篇文章主要為大家詳細介紹了java springmvc實現(xiàn)驗證碼功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Springboot集成kafka高級應(yīng)用實戰(zhàn)分享

    Springboot集成kafka高級應(yīng)用實戰(zhàn)分享

    這篇文章主要介紹了Springboot集成kafka高級應(yīng)用實戰(zhàn)分享,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 詳解@ConditionalOnMissingBean注解的作用

    詳解@ConditionalOnMissingBean注解的作用

    這篇文章主要介紹了詳解@ConditionalOnMissingBean注解的作用,@ConditionalOnMissingBean,它是修飾bean的一個注解,主要實現(xiàn)的是,當(dāng)你的bean被注冊之后,如果而注冊相同類型的bean,就不會成功,它會保證你的bean只有一個,需要的朋友可以參考下
    2023-10-10
  • Java實現(xiàn)支付寶之第三方支付寶即時到賬支付功能

    Java實現(xiàn)支付寶之第三方支付寶即時到賬支付功能

    這篇文章主要介紹了Java實現(xiàn)支付寶之第三方支付寶即時到賬支付功能的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • SpringBoot中的異步執(zhí)行方法詳解

    SpringBoot中的異步執(zhí)行方法詳解

    這篇文章主要介紹了SpringBoot中的異步執(zhí)行方法詳解,ThreadpoolTaskExecutor不需要手動的創(chuàng)建當(dāng)前線程池,但往往我們還是會手動指定,具體原因看源碼就可以自有判斷,需要的朋友可以參考下
    2023-10-10
  • Java與kotlin詳細對比

    Java與kotlin詳細對比

    這篇文章主要介紹了Java與kotlin詳細對比,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Java線程的相關(guān)方法詳細解析

    Java線程的相關(guān)方法詳細解析

    以下是對Java線程的相關(guān)方法進行了詳細的介紹,需要的朋友可以過來參考下
    2013-09-09
  • SpringBoot中實現(xiàn)@Scheduled動態(tài)定時任務(wù)

    SpringBoot中實現(xiàn)@Scheduled動態(tài)定時任務(wù)

    SpringBoot中的@Scheduled注解為定時任務(wù)提供了一種很簡單的實現(xiàn),本文主要介紹了SpringBoot中實現(xiàn)@Scheduled動態(tài)定時任務(wù),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • java使用文件流實現(xiàn)查看下載次數(shù)

    java使用文件流實現(xiàn)查看下載次數(shù)

    這篇文章主要為大家詳細介紹了java使用文件流實現(xiàn)查看下載次數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07

最新評論

永川市| 连平县| 册亨县| 长春市| 桂阳县| 昔阳县| 临清市| 柏乡县| 陕西省| 龙江县| 武威市| 奉贤区| 教育| 东乡族自治县| 涞水县| 玛沁县| 唐海县| 普安县| 苍南县| 临泉县| 皋兰县| 微山县| 连云港市| 宜良县| 永嘉县| 轮台县| 彝良县| 枣阳市| 彰化县| 汾西县| 利川市| 崇文区| 康马县| 陆川县| 墨竹工卡县| 昌乐县| 河北省| 鹤山市| 合江县| 秭归县| 渑池县|