<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                **定義:**中介者模式(MediatorPattern),用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。 **類型:**對象行為型模式 概述: ?????????面向對象編程,鼓勵將行為分散到對象當中。這樣的好處,增強對象的可復用性,但是帶來的負面作用是,當多個對象交互時不可避免地會帶來耦合性的大大提升。 ?????????中介者模式的提出,就是為了解決多個對象相互交互時耦合性提升的問題。中介者模式主要通過將不同對象中涉及到交互的行為抽象出來,達到解耦的作用。這樣,每個對象都只需要和中介者打交到即可,不用關注太多的對象。 ????????比如一個項目組,有一個項目經理和幾個項目開發人員。如,開發人員需要開發資料,直接找項目經理要,項目經理去協調采購人員進行采購。又如,開發人員需要了解一個具體的需求,也直接找項目經理,然后項目經理去找銷售人員了解更詳細的需求。總之,開發人員,需要什么,都直接找項目經理就可以了,而不必關心去找誰,并如何跟對象交流。這樣看來,開發人員就不會和其他對象產生交互,也就不會有很大的耦合性,比較純粹,專注于自己的開發就好。這樣,只要技術過關的人都可以充當開發人員,而不必要有各種關系,溝通技巧之類的。提高了開發人員的可復用性。 類圖: ![](https://box.kancloud.cn/2016-08-19_57b6b4674cffa.jpg) 參與者: 1. Mediator,提供與Staff交互的接口。 1. ProjectManger,實現具體的接口來完成和不同職員的交互。 1. Staff,提供成員與Mediator交互的基本接口。 1. Developer,Buyer,Seller,完成各自的工作,然后通過Meditor的接口告訴具體的ProjectManager。 示例代碼: ~~~ using System; using System.Collections.Generic; using System.Text; namespace MediatorPattern { abstract class Mediator { public abstract void Comunicate(string message, Staff colleague); } class ProjectManger : Mediator { private Developer staff1; private Buyer staff2; private Seller staff3; public Developer Staff1 { set { staff1 = value; } } public Buyer Staff2 { set { staff2 = value; } } public Seller Staff3 { set { staff3 = value; } } public override void Comunicate(string message, Staff staff) { staff.Notify(message); } } abstract class Staff { protected Mediator mediator; public Staff(Mediator mediator) { this.mediator = mediator; } public abstract void Notify(string message); } class Developer : Staff { public Developer(Mediator mediator) : base(mediator) { } public void Ask(string message) { mediator.Comunicate(message, this); } public override void Notify(string message) { Console.WriteLine("開發人員完成開發任務" + message); } } class Buyer : Staff { public Buyer(Mediator mediator) : base(mediator) { } public void Send(string message) { mediator.Comunicate(message, this); } public override void Notify(string message) { Console.WriteLine("采購人員已經知道" + message); } } class Seller : Staff { public Seller(Mediator mediator) : base(mediator) { } public void Tell(string message) { mediator.Comunicate(message, this); } public override void Notify(string message) { Console.WriteLine("銷售人員已經知道" + message); } } class Program { static void Main(string[] args) { ProjectManger mediator = new ProjectManger(); Developer staff1 = new Developer(mediator); Buyer staff2 = new Buyer(mediator); Seller staff3 = new Seller(mediator); mediator.Staff1 = staff1; mediator.Staff2 = staff2; mediator.Staff3 = staff3; staff1.Ask("需要電路板"); staff2.Send("已經采購電路板"); staff1.Ask("需要客戶需求"); staff3.Tell("已經去調查"); } } } ~~~ **適用性:** 1. 一組對象以定義良好但是復雜的方式進行通信。產生的相互依賴關系結構混亂且難以理解。 1. 一個對象引用其他很多對象并且直接與這些對象通信,導致難以復用該對象。 1. 想定制一個分面在多個類中的行為,而又不想生成太多的子類。 優缺點: 1. 優點,降低對象之間的耦合度,提高對象的可復用用程度。 1. 缺點,如果交互的對象過多,中介者會非常復雜,難于管理。 參考資料: 1. 《設計模式——可復用面向對象軟件基礎》 1. 《大話設計模式》
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看