設計模式學習筆記十八——Mediator模式

來源:互聯網
上載者:User
動機:在系統構建過程中,經常出現多個對象相互關聯互動的情況,對象之間常常會維持一種複雜的參考關聯性,面對變化能力弱。用一個中介對象來封裝一系列的對象互動,中介者使各對象不需要顯式的相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的變化。
 
情境:考慮一個文字編輯器,包含剪下菜單、粘帖按鈕、文本編輯地區、剪貼簿等對象,它們需要相互引用和互動。

結構

代碼
namespace DesignPattern.Mediator
{
    public abstract class Mediator
    {
        private IList<Control> controls;

        public Mediator()
        {
            controls = new IList<Control> ();
        }

        // 管理互動
        public abstract void ControlChanged(Control control);

        public void Add(Control control)
        {
            controls.Add(control);
        }
    }

    public class CutMediator : Mediator
    {
        public CutMediator()
            : base()
        {
        }

        public override void ControlChanged(Control control)
        {
            if (control is CutMenuItem)
            {
            }
            else if (control is PasteButton)
            {
            }
            else if (control is TextArea)
            {
            }
            else if (control is ClipBoard)
            {
            }
        }
    }
}

namespace DesignPattern.Mediator
{
    public abstract class Control
    {
        private Mediator mediator;

        public Control(Mediator mediator)
        {
            this.mediator = mediator;
        }

        public virtual void Changed()
        {
            mediator.ControlChanged(this);
        }
    }

    public class CutMenuItem : Control
    {
        public CutMenuItem(Mediator mediator)
            : base(mediator)
        {
        }

        public override void Changed()
        {
            //
            base.Changed();
        }
    }

    public class PasteButton : Control
    {
        public PasteButton(Mediator mediator)
            : base(mediator)
        {
        }

        public override void Changed()
        {
            //
            base.Changed();
        }
    }

    public class TextArea : Control
    {
        public TextArea(Mediator mediator)
            : base(mediator)
        {
        }

        public override void Changed()
        {
            //
            base.Changed();
        }
    }

    public class ClipBoard : Control
    {
        public ClipBoard(Mediator mediator)
            : base(mediator)
        {
        }

        public override void Changed()
        {
            //
            base.Changed();
        }
    }
}

 要點: 
      1、本模式將多個對象間複雜的關聯關係解耦,對多個對象間的控制邏輯進行集中管理,變“多個對象互相關聯”為“多個對象和一個中介者關聯”,簡化了系統維護,能更好地面對變化。
      2、隨著控制邏輯的複雜化,Mediator具體對象的實現可能相當複雜,這時候可對其進行分解處理。
      3、Facade模式是解耦系統外到系統內(單向)的對象關聯關係;本模式是解耦系統內各個對象之間(雙向)的關聯關係。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.