<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 阿蜜果 閱讀(4128) 評論(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

    積分與排名

    • 積分 - 2298114
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 99亚洲乱人伦aⅴ精品| 四虎永久在线精品免费观看地址 | 最近免费中文字幕大全免费版视频 | 亚洲乱色熟女一区二区三区蜜臀| 最近2019中文字幕免费大全5| 亚洲最大福利视频网站| 日韩成人免费视频| 精品无码一区二区三区亚洲桃色 | 麻豆亚洲AV成人无码久久精品 | 九九热久久免费视频| 成人午夜亚洲精品无码网站| 中文字幕免费在线看| 亚洲国产精品一区二区成人片国内| 两个人看的www免费视频中文| 亚洲国产成人久久综合碰碰动漫3d | 成年男女男精品免费视频网站| 在线综合亚洲欧洲综合网站| 女人被男人桶得好爽免费视频 | 97无码人妻福利免费公开在线视频 | 免费国产成人午夜电影| 一级特黄特色的免费大片视频| 国产亚洲精午夜久久久久久| 中文字幕的电影免费网站| 久久久亚洲欧洲日产国码是AV| 成年女人毛片免费播放视频m| 国产亚洲高清在线精品不卡| 国产亚洲精久久久久久无码AV| 7m凹凸精品分类大全免费| 亚洲中文字幕久久久一区| 丁香亚洲综合五月天婷婷| 国产午夜影视大全免费观看| 日日狠狠久久偷偷色综合免费 | 国产亚洲综合精品一区二区三区| 夜夜春亚洲嫩草影院| 成人在线免费看片| 免费一区二区无码视频在线播放 | 亚洲理论电影在线观看| 99久久国产热无码精品免费| 理论亚洲区美一区二区三区| 亚洲av永久无码精品古装片 | 国产成人精品日本亚洲语音|