中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何深入理解Java設計模式的中介者模式

發布時間:2021-11-05 17:51:18 來源:億速云 閱讀:147 作者:柒染 欄目:開發技術

這期內容當中小編將會給大家帶來有關如何深入理解Java設計模式的中介者模式,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

    一、什么是中介者模式

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

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

    二、中介者模式的結構

    如何深入理解Java設計模式的中介者模式

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

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

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

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

    三、中介者模式的優缺點

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

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

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

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

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

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

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

    1. 中介者模式與業務相關,訂閱/發布模式與業務無關。

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

    六、中介者模式的實現

    安理會做中介

    聯合國機構類--Mediator類

    //聯合國機構
    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);
        }
    }

    聯合國安理會--ConcreteMediator類

    //聯合國安全理事會
    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("不準研發核武器,否則開戰");
            c2.Declare("沒研發,開戰就開戰");
            Console.Read();
        }
    }

    伊拉克獲得對方消息:不準研發核武器,否則開戰
    美國獲得對方消息:沒研發,開戰就開戰

    上述就是小編為大家分享的如何深入理解Java設計模式的中介者模式了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    阳江市| 于都县| 绍兴市| 读书| 共和县| 龙山县| 电白县| 元谋县| 唐河县| 巴彦淖尔市| 昭觉县| 武夷山市| 上思县| 吴忠市| 太谷县| 修武县| 永顺县| 原阳县| 华阴市| 乌拉特后旗| 鱼台县| 太仆寺旗| 米泉市| 崇信县| 尉氏县| 克拉玛依市| 怀集县| 龙山县| 孟连| 大安市| 临沧市| 青阳县| 萨嘎县| 大余县| 芒康县| 东城区| 开封县| 双牌县| 南丹县| 贞丰县| 衡阳市|