<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

     

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

    public abstract class Colleague {
        privat Mediator mediator;

        
    /**
         * 構造函數
         
    */

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


        
    /**
         * 獲得調停者對象
         
    */

            
    public Mediator getMediator() {
            
    return mediator;
        }


            
    /**
         * 具體行為,由子類實現
         
    */

        
    public abstract void action();
    }

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


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

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

    省略
    ");
        }

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


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

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

    省略
    ");
        }

    }


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

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

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


        
    /**
         * 工廠方法,創建同事對象
         
    */

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


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

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


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

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

          Power Designer系統分析與建模實戰  (2015年7月出版)
          
         Struts2+Hibernate3+Spring2   (2010年5月出版)
         

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊

    關注blog

    積分與排名

    • 積分 - 2294312
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲综合在线成人一区| 亚洲一区爱区精品无码| 亚洲免费在线视频播放| 免费A级毛片无码专区| 亚洲国产精品自在在线观看 | 久久99国产综合精品免费| 国产亚洲一区二区三区在线观看| 国产成人无码精品久久久久免费| 国产精品亚洲高清一区二区| 国内少妇偷人精品视频免费| 亚洲Aⅴ无码专区在线观看q| 日韩在线不卡免费视频一区| 亚洲精品国产肉丝袜久久| 一本无码人妻在中文字幕免费 | 一个人免费观看www视频| 亚洲无人区一区二区三区| 水蜜桃视频在线观看免费播放高清| 久久综合日韩亚洲精品色| 色欲色香天天天综合网站免费| 亚洲视频免费一区| 女人18毛片水最多免费观看| 国产精品亚洲专区一区| 亚洲色成人网站WWW永久| **一级一级毛片免费观看| 亚洲中文字幕久久精品蜜桃| 又黄又大又爽免费视频| 久久免费公开视频| 中文字幕乱码亚洲精品一区 | 永久免费AV无码网站国产| 亚洲黄色在线观看网站| 午夜寂寞在线一级观看免费| 国产乱子伦精品免费视频| 亚洲网站免费观看| 午夜亚洲福利在线老司机| 日本免费人成网ww555在线| 亚洲狠狠成人综合网| 中文字幕人成人乱码亚洲电影| 欧洲一级毛片免费| 深夜福利在线视频免费| 亚洲国产片在线观看| 国产亚洲情侣一区二区无码AV |