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

深入理解Java設計模式之中介者模式

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

一、什么是中介者模式

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

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

二、中介者模式的結構

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

安理會做中介

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

//聯(lián)合國機構
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("不準研發(fā)核武器,否則開戰(zhàn)");
        c2.Declare("沒研發(fā),開戰(zhàn)就開戰(zhàn)");
        Console.Read();
    }
}

結果

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

總結

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

相關文章

  • Mybatis返回類型為Map時遇到的類型轉化的異常問題

    Mybatis返回類型為Map時遇到的類型轉化的異常問題

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

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

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

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

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

    詳解@ConditionalOnMissingBean注解的作用

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

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

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

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

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

    Java與kotlin詳細對比

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

    Java線程的相關方法詳細解析

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

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

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

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

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

最新評論

平利县| 宜良县| 旬邑县| 德州市| 岢岚县| 肇东市| 西平县| 胶南市| 滕州市| 金湖县| 四子王旗| 杭州市| 博兴县| 建宁县| 遂昌县| 白城市| 太仆寺旗| 明水县| 太原市| 乌鲁木齐县| 砀山县| 康平县| 大荔县| 长乐市| 广平县| 阳山县| 长宁区| 佛教| 凤凰县| 五原县| 浏阳市| 呼伦贝尔市| 安新县| 平舆县| 新竹县| 海南省| 泗阳县| 华蓥市| 高邮市| 皋兰县| 东乌珠穆沁旗|