設計模式(十一):中介者模式

K戰神發表於2016-01-13

一、定義

用一箇中介者物件封裝一系列的物件互動,中介者使各物件不需要顯示地相互作用,從而使耦合鬆散,而且可以獨立地改變它們之間的互動。

總結一下:類之間的行為互相影響,有著剪不斷理還亂的關係。需要中介者來調停。

三大部分:

同事類:類A和類B互相影響。我們將他們稱之為同事類。

抽象中介者:中介者和同事類之間的紐帶。便於多個同時類的通訊(事件)。

中介者:繼承抽象中介者,一個同事類發出訊息,影響其他同事類。

二、例項:匯款場景

2.1 同事類 :A向B匯款 ,收款人和匯款人餘額互相影響.

 interface IColleague
    {
        void PayIn(decimal money);
        void PayOut(decimal money);
    }
 public class Remitter : IColleague
    {
        public void PayOut(decimal money)
        {
            Console.WriteLine("匯款 : {0}元", money);
        }

        public void PayIn(decimal money)
        {
        }
    }
    public class Payee : IColleague
    {
        public void PayIn(decimal money)
        {
            Console.WriteLine("收款 : {0}元", money);
        }
        public void PayOut(decimal money)
        {
        }
    }

2.2 中介者

 interface IMediator
    {
        void PayFromRemitterToPayee(decimal money);
    }
 public class DealMediator : IMediator
    {
        private IColleague remitter;
        private IColleague payee;
        public void PayFromRemitterToPayee(decimal money)
        {
            remitter.PayOut(money);
            payee.PayIn(money);
        }
        public void CreateColleaguePayIntance()
        {
            remitter = new Remitter();
            payee = new Payee();
        }
    }

客戶端:

            //-----------------------中介者模式----------------
            Mediator.DealMediator mediator = new Mediator.DealMediator();
            mediator.CreateColleaguePayIntance();
            mediator.PayFromRemitterToPayee(1000);
            Console.ReadKey();

結果:

三、優缺點

優:

  1、將原來的網狀關係梳理成星狀結構,通過中心點—中介者來實現互相溝通。

  2、解耦同事類。

缺:

  1、如果同事類較多,中介者將會迅速膨脹,中介者中的邏輯也將變多,膨脹厲害之後不利於以後的擴充。

  2、如果有業務的變化將會修改中介者,很多業務集中在這裡,可能會產生影響。

 

相關文章