<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 297,  comments - 1618,  trackbacks - 0

     

            調(diào)停者模式(Mediator) 屬于對(duì)象的行為模式
    1. 定義
         調(diào)停者模式包裝了一系列對(duì)象相互作用的方式,使得這些對(duì)象不必相互明顯作用。從而使他們可以松散偶合。當(dāng)某些對(duì)象之間的作用發(fā)生改變時(shí),不會(huì)立即影響其他的一些對(duì)象之間的作用。保證這些作用可以彼此獨(dú)立的變化。調(diào)停者模式將多對(duì)多的相互作用轉(zhuǎn)化為一對(duì)多的相互作用。調(diào)停者模式將對(duì)象的行為和協(xié)作抽象化,把對(duì)象在小尺度的行為上與其他對(duì)象的相互作用分開(kāi)處理。
    2. 使用的原因
          
    當(dāng)對(duì)象之間的交互操作很多,且每個(gè)對(duì)象的行為操作都依賴彼此時(shí),為防止
    在修改一個(gè)對(duì)象的行為時(shí),同時(shí)涉及到修改很多其他對(duì)象的行為,可采用調(diào)停者模式,來(lái)解決緊耦合問(wèn)題.
         該模式將對(duì)象之間的多對(duì)多關(guān)系變成一對(duì)多關(guān)系,調(diào)停者對(duì)象將系統(tǒng)從網(wǎng)狀
    結(jié)構(gòu)變成以調(diào)停者為中心的星形結(jié)構(gòu),達(dá)到降低系統(tǒng)的復(fù)雜性,提高可擴(kuò)展性的作用.
    3. 適用的情況舉例
        eg1. WTO組織:它是一個(gè)協(xié)調(diào)組織,它將各貿(mào)易區(qū)自行進(jìn)行的相互協(xié)調(diào)的強(qiáng)耦合變成了松散合;
        eg2. 4個(gè)MM打麻將,相互之間誰(shuí)應(yīng)該給誰(shuí)多少錢算不清楚了,某人擔(dān)任調(diào)停者,各MM按照各自的籌碼數(shù)算錢,賺了錢的從調(diào)停者這里拿,賠了錢的也付給調(diào)停者;
        eg3. 租賃中介:很多人有出租房子的需求,也有不少人需要租房,租賃中介在其中擔(dān)任了調(diào)停者的角色,  疏通了兩者之間的復(fù)雜關(guān)系,也方便了兩者。     
    4. 類圖結(jié)構(gòu)及說(shuō)明
      1)示意性類圖如下所示:
        
       2)類說(shuō)明
        i)Mediator:抽象調(diào)停者角色,它定義出同事對(duì)象到調(diào)停者對(duì)象得接口,這個(gè)角色一般由Java抽象類實(shí)現(xiàn)
        ii)ConcreteMediator:具體調(diào)停者模式,從抽象調(diào)停者繼承,實(shí)現(xiàn)了超類所聲明的事件方法,它從具體同事對(duì)象接收消息,向具體同事對(duì)象發(fā)出命令.
        iii)Colleague:抽象同事類角色,它定義了調(diào)停者同事對(duì)象的接口,它只知道調(diào)停者而不知道其余同事對(duì)象.
        iv)colleague1、colleague2:具體同事類角色,從抽象同事類繼承而來(lái),每個(gè)具體同事類都知道本身在小范圍內(nèi)的行為,而不知道它在大范圍內(nèi)的目的.
    5. 使用舉例
        1)需求
        有次去佛山開(kāi)發(fā)一個(gè)項(xiàng)目時(shí),我們項(xiàng)目組要去現(xiàn)場(chǎng)開(kāi)發(fā),開(kāi)發(fā)時(shí)間為一個(gè)月,PM打算到附近租個(gè)房子,但因?qū)Ψ鹕讲皇煜ぃ乙驗(yàn)橹蛔庖粋€(gè)月,很多房東都不愿意租,所以找個(gè)合適的房子真是難上加難。
        2)分析
        很多的房東需要出租自己的房子,而有很多的房客需要租房子,房屋需求和供給之間存在著錯(cuò)綜復(fù)雜的關(guān)系,為解決這種錯(cuò)綜復(fù)雜的關(guān)系,我們考慮運(yùn)用弄個(gè)“中介者”出來(lái),這樣房東和房客都只需要跟這個(gè)中介打交道,方便了兩者,嘻嘻,當(dāng)時(shí)我們找了個(gè)房屋租賃中介,在短期內(nèi)以2800元的價(jià)格租了個(gè)套間,當(dāng)然還付出了不少的中介費(fèi):)
        3)代碼參考實(shí)現(xiàn)
            i)抽象同事類
         

    public abstract class Colleague {
        privat Mediator mediator;

        
    /**
         * 構(gòu)造函數(shù)
         
    */

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


        
    /**
         * 獲得調(diào)停者對(duì)象
         
    */

            
    public Mediator getMediator() {
            
    return mediator;
        }


            
    /**
         * 具體行為,由子類實(shí)現(xiàn)
         
    */

        
    public abstract void action();
    }

           ii) 具體同事類
             a) 房東類
    public class Landlord extends Colleague {
        
    public Landlord(Mediator mediator) {
            
    super(mediator);
        }


        
    /**
         * 房東具體的行為方法,例如,將房間資料交給中介等
         
    */

        
    public void action() {
            System.out.println(
    "進(jìn)行將房間資料交給中介等操作,

    省略
    ");
        }

    }
            b) 房客
    public class Lodger extends Colleague {
        
    public Lodger(Mediator mediator) {
            
    super(mediator);
        }


        
    /**
         * 房客具體的行為方法,例如,將租房需求交給中介等
         
    */

        
    public void action {
            System.out.println(
    "進(jìn)行將租房需求交給中介等操作,

    省略
    ");
        }

    }


         iii)抽象調(diào)停者角色
       
    public abstract class Mediator {
        
    public abstract void colleagueChanged(Colleague 

    colleage);
    }
         iv)具體調(diào)停者角色
      
    public class ConcreteMediator extends Mediator {
        
    private Landlord landlord;
        
    private Lodger lodger;

        
    public void colleagueChanged(Colleague colleague) {
            landlord.action();
            lodger.action();
        }


        
    /**
         * 工廠方法,創(chuàng)建同事對(duì)象
         
    */

        
    public void createConcreteMediator() {
            landlord 
    = new Landlord(this);
            lodger 
    = new Lodger(this);
        }


        
    //省略房東與房客的getter方法
    }

     參考書籍:《Java與模式》
                        《Patterns in Java》
    posted on 2007-04-14 11:24 阿蜜果 閱讀(4120) 評(píng)論(3)  編輯  收藏 所屬分類: Design Pattern


    FeedBack:
    # re: 設(shè)計(jì)模式學(xué)習(xí)筆記--調(diào)停者模式(Mediator)
    2007-04-15 09:20 | dennis
    不錯(cuò)  回復(fù)  更多評(píng)論
      
    # re: 設(shè)計(jì)模式學(xué)習(xí)筆記--調(diào)停者模式(Mediator)
    2007-09-18 14:21 | paul
    同事只能意識(shí)到調(diào)停者的存在,不能意識(shí)到其他同事的存在從而對(duì)象之間的耦合性降低
    那么對(duì)象之間是如何通知那?感覺(jué)例子不完整
      回復(fù)  更多評(píng)論
      
    # re: 設(shè)計(jì)模式學(xué)習(xí)筆記--調(diào)停者模式(Mediator)
    2008-11-07 14:08 | 志武
    你的例子是錯(cuò)誤的,沒(méi)有理解調(diào)停者模式的精髓。
    同事對(duì)象之間是如何協(xié)調(diào)工作的呢?你并沒(méi)有給出。  回復(fù)  更多評(píng)論
      
    <2007年4月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

          生活將我們磨圓,是為了讓我們滾得更遠(yuǎn)——“圓”來(lái)如此。
          我的作品:
          玩轉(zhuǎn)Axure RP  (2015年12月出版)
          

          Power Designer系統(tǒng)分析與建模實(shí)戰(zhàn)  (2015年7月出版)
          
         Struts2+Hibernate3+Spring2   (2010年5月出版)
         

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊(cè)

    關(guān)注blog

    積分與排名

    • 積分 - 2294512
    • 排名 - 3

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 日韩免费的视频在线观看香蕉| 亚洲AV男人的天堂在线观看| 无遮挡a级毛片免费看| 永久免费av无码不卡在线观看| 67pao强力打造67194在线午夜亚洲| 成人电影在线免费观看| 亚洲中文字幕无码久久2017 | 亚洲精品国产自在久久 | 最刺激黄a大片免费网站| 亚洲精品二区国产综合野狼| 免费污视频在线观看| 老司机亚洲精品影院无码| 最近中文字幕mv免费高清在线| 亚洲高清美女一区二区三区| 91免费国产在线观看| 亚洲色精品三区二区一区| 国产成人青青热久免费精品| 免费精品视频在线| 国产亚洲一区二区在线观看| 免费国产污网站在线观看15| 亚洲人成黄网在线观看| 免费理论片51人人看电影| 无套内射无矿码免费看黄| 国产成人精品日本亚洲| 99久热只有精品视频免费看 | 亚洲成a人片在线观看天堂无码 | 在线免费视频一区| 四虎影视久久久免费| 久久久综合亚洲色一区二区三区| 亚洲天堂免费在线| 色偷偷亚洲男人天堂| 亚洲色婷婷六月亚洲婷婷6月| 久久中文字幕免费视频| 亚洲精品自偷自拍无码| 精品亚洲视频在线观看| 精品国产污污免费网站aⅴ| 色偷偷亚洲第一综合| 亚洲国产精品一区| 国产又黄又爽又猛的免费视频播放| CAOPORN国产精品免费视频| 亚洲av永久综合在线观看尤物|