<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                #中介者模式(Mediator Pattern) ##簡介 在用戶與用戶直接聊天的設計方案中,用戶對象之間存在很強的關聯性,將導致系統出現如下問題: * 系統結構復雜:對象之間存在大量的相互關聯和調用,若有一個對象發生變化,則需要跟蹤和該對象關聯的其他所有對象,并進行適當處理。 * 對象可重用性差:由于一個對象和其他對象具有很強的關聯,若沒有其他對象的支持,一個對象很難被另一個系統或模塊重用,這些對象表現出來更像一個不可分割的整體,職責較為混亂。 * 系統擴展性低:增加一個新的對象需要在原有相關對象上增加引用,增加新的引用關系也需要調整原有對象,系統耦合度很高,對象操作很不靈活,擴展性差。 * 在面向對象的軟件設計與開發過程中,根據“單一職責原則”,我們應該盡量將對象細化,使其只負責或呈現單一的職責。 * 對于一個模塊,可能由很多對象構成,而且這些對象之間可能存在相互的引用,為了減少對象兩兩之間復雜的引用關系,使之成為一個松耦合的系統,我們需要使用中介者模式,這就是中介者模式的模式動機。 ***中介者模式(Mediator Pattern)定義:用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。中介者模式又稱為調停者模式,它是一種對象行為型模式。*** ##案例 安理會做中介 ``` //聯合國機構 abstract class UnitedNations { //聲明 public abstract void Declare(string message,Country colleagues); } ``` 國家類 相當于Colleague類 ``` abstract class Country { protected UnitedNations mediator; public Country(UnitedNations mediator) { this.mediator = mediator; } } ``` 美國類 相當于ConcreteColleague1類 ``` 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); } } ``` 伊拉克類 相當于ConcreteColleague2類 ``` 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 UnitedNationsSecurityCouncil: 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); } } } ``` 客戶端調用 ``` static void Main(string[] args) { UnitedNationsSecurityCouncil UNSC = new UnitedNationsSecurityCouncil(); USA c1 = new USA(UNSC); Iraq c2 = new Iraq(UNSC); UNSC.Colleague1 = c1; UNSC.Colleague2 = c2; c1.Declare("不準研發核武器"); c2.Declare("我們沒有,但我們不怕侵略"); Console.Read(); } ``` 中介者模式的優點首先是Mediator的出現減少了各個Colleague的耦合,可以毒瘤地改變和復用各個Colleague類和Mediator。其次由于把對象如何協作進行類抽象,將中介作為一個獨立的概念并且將其封裝在一個對象中,這樣關注的對象就從對象本身的行為轉移到它們的交互上來,也就是站在一個更宏觀的角度去看待系統。 但是,由于ConcreyeMediator控制了集中化,于是就把交互復雜性變為了中介者的復雜性,這就使得中介者會變得比任何一個ConcreteColleague都復雜。
                  <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>

                              哎呀哎呀视频在线观看