• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            為生存而奔跑

               :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              271 Posts :: 0 Stories :: 58 Comments :: 0 Trackbacks

            留言簿(5)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            積分與排名

            • 積分 - 326887
            • 排名 - 74

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            Mediator模式包裝了一系列對(duì)象的相互作用的方式,使得這些對(duì)象不必相互明顯引用,從而降低耦合性。

            盡管將一個(gè)系統(tǒng)分割成許多對(duì)象通常可以增加其可復(fù)用性,但是對(duì)象間相互連接的激增又會(huì)降低其可復(fù)用性了。大量的連接使得一個(gè)對(duì)象不可能在沒有其他對(duì)象的支持下工作,系統(tǒng)表現(xiàn)為一個(gè)不可分割的整體,所以,對(duì)系統(tǒng)的行為進(jìn)行任何較大的改動(dòng)就十分困難。

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

            中介者模式很容易在系統(tǒng)中應(yīng)用,也很容易在系統(tǒng)中誤用。當(dāng)系統(tǒng)出現(xiàn)了‘多對(duì)多’交互復(fù)雜的對(duì)象群時(shí),不要急于使用中介者模式,而要先反思你的系統(tǒng)在設(shè)計(jì)上是不是合理。

            中介者模式的優(yōu)點(diǎn):首先,Mediator的出現(xiàn)減少了各個(gè)Colleague的耦合,使得可以獨(dú)立地改變和復(fù)用各個(gè)Colleague類和Mediator。其次,由于把對(duì)象如何協(xié)作進(jìn)行了抽象,將中介作為一個(gè)獨(dú)立的概念并將其封裝在一個(gè)對(duì)象中,這樣關(guān)注的對(duì)象就從對(duì)象各自本身的行為轉(zhuǎn)移到它們之間的交互上來,也就是站在一個(gè)更宏觀的角度去看待系統(tǒng)。

            中介者模式的缺點(diǎn):由于ConcreteMediator控制了集中化,于是就把交互復(fù)雜性變?yōu)榱酥薪檎叩膹?fù)雜性,這就使得中介者會(huì)變得比任何一個(gè)ConcreteColleague都復(fù)雜。



            abstract class Mediator
            {
                
            public abstract void colleagueChanged(Colleague c);
            }

            class ConcreteMediator extends Mediator
            {
                
            private Colleague1 colleague1;
                
            private Colleague2 colleague2;
                
            public Concretemediator()
                
            {
                    colleague1
            =new Colleague1();
                    colleague2
            =new Colleague2();
                }

                
            public void colleagueChanged(Colleague c)
                
            {
                    colleague1.action();
                    colleague2.action();
                }

            }

            abstract class Colleague
            {
                Mediator m;
                
            public Colleague(Mediator m)
                
            {
                    
            this.m=m;
                }

                
            public void change()
                
            {
                    m.colleagueChanged(
            this);
                }

                
            public abstract void action(); 
            }

            class Colleague1 extends Colleague
            {
                
            public Colleague1(Mediator m)
                
            {
                    
            super(m);
                }

                
            public void action()
                
            {
                    System.out.println(
            "action from Colleague1");
                }

            }

            class Colleague2 extends Colleague
            {
                
            public Colleague2(Mediator m)
                
            {
                    
            super(m);
                }

                
            public void action()
                
            {
                    System.out.println(
            "action from Colleague2");
                }

            }

            public class Client
            {
                
            public static void main(String[] args) 
                
            {
                    ConcreteMediator mediator
            =new ConcreteMediator();
                    Colleague1 c1
            =new Colleague1(mediator);
                    Colleague2 c2
            =new Colleague2(mediator);
                    mediator.colleagueChanged(c1);
                }

            }

            posted on 2009-11-30 09:51 baby-fly 閱讀(1295) 評(píng)論(1)  編輯 收藏 引用 所屬分類: Design Pattern

            Feedback

            # re: 設(shè)計(jì)模式--Mediator模式 2011-09-20 09:54 七弦
            你給的這個(gè)例子是錯(cuò)的
            Colleage沒有提供無參構(gòu)造函數(shù)。得把Colleage派生類的實(shí)例傳遞進(jìn)去。  回復(fù)  更多評(píng)論
              

            亚洲国产精品人久久| 久久久精品日本一区二区三区| 97久久精品无码一区二区| 91麻精品国产91久久久久| 日本亚洲色大成网站WWW久久| 久久丫忘忧草产品| 一级做a爱片久久毛片| 久久天天躁夜夜躁狠狠| 香蕉久久一区二区不卡无毒影院| 欧美激情精品久久久久久久| 久久夜色精品国产噜噜亚洲AV| 久久免费视频网站| 亚洲日本久久久午夜精品| 国产精品久久成人影院| 久久综合亚洲色HEZYO社区| 97久久精品人人澡人人爽| 日韩人妻无码一区二区三区久久 | 99热精品久久只有精品| 久久无码国产专区精品| 久久天天躁狠狠躁夜夜2020老熟妇| 久久99精品久久久久婷婷| 婷婷久久五月天| 久久久久久亚洲精品无码| 久久91精品国产91久久户| 国产毛片欧美毛片久久久 | 久久精品无码专区免费东京热| 久久久久久久久久久免费精品| 欧美熟妇另类久久久久久不卡 | 久久亚洲中文字幕精品有坂深雪 | 97久久精品人妻人人搡人人玩 | 久久人人超碰精品CAOPOREN| 欧美一区二区精品久久| 久久青青草原精品影院| 久久精品人成免费| 久久精品aⅴ无码中文字字幕不卡| 天堂无码久久综合东京热| 久久男人AV资源网站| 欧美久久一区二区三区| 欧美成人免费观看久久| 狠狠色丁香婷婷久久综合| 一本色道久久综合狠狠躁|