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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                14.2 中介者模式的定義 中介者模式的定義為:Define an object that encapsulates how a set of objects interact.Mediator promotes loose coupling by keeping objects from referring to each other explicitly,and it lets you vary their interaction independently.(用一個中介對象封裝一系列的對象交互,中介者使各對象不需要顯示地相互作用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。) 中介者模式通用類圖如圖14-7所示。 ![](https://box.kancloud.cn/2016-08-14_57b0036412c94.jpg) 圖14-7 中介者模式通用類圖 從類圖中看,中介者模式由以下幾部分組成: ● Mediator 抽象中介者角色 抽象中介者角色定義統一的接口,用于各同事角色之間的通信。 ● Concrete Mediator 具體中介者角色 具體中介者角色通過協調各同事角色實現協作行為,因此它必須依賴于各個同事角色。 ● Colleague 同事角色 每一個同事角色都知道中介者角色,而且與其他的同事角色通信的時候,一定要通過中介者角色協作。每個同事類的行為分為兩種:一種是同事本身的行為,比如改變對象本身的狀態,處理自己的行為等,這種行為叫做自發行為(Self-Method),與其他的同事類或中介者沒有任何的依賴;第二種是必須依賴中介者才能完成的行為,叫做依賴方法(Dep-Method)。 中介者模式比較簡單,其通用源碼也比較簡單,先看抽象中介者Mediator類,如代碼清單14-12所示。 代碼清單14-12 通用抽象中介者 public?abstract?class?Mediator?{ ?????//定義同事類 ?????protected?ConcreteColleague1?c1; ?????protected?ConcreteColleague2?c2; ?????//通過getter/setter方法把同事類注入進來 ?????public?ConcreteColleague1?getC1()?{ ?????????????return?c1; ?????} ?????public?void?setC1(ConcreteColleague1?c1)?{ ?????????????this.c1?=?c1; ?????} ?????public?ConcreteColleague2?getC2()?{ ?????????????return?c2; ?????} ?????public?void?setC2(ConcreteColleague2?c2)?{ ?????????????this.c2?=?c2; ?????} ?????//中介者模式的業務邏輯 ?????public?abstract?void?doSomething1(); ?????public?abstract?void?doSomething2(); } 在Mediator抽象類中我們只定義了同事類的注入,為什么使用同事實現類注入而不使用抽象類注入呢?那是因為同事類雖然有抽象,但是沒有每個同事類必須要完成的業務方法,當然如果每個同事類都有相同的方法,比如execute、handler等,那當然注入抽象類,做到依賴倒置。 具體的中介者一般只有一個,即通用中介者,其源代碼如代碼清單14-13所示。 代碼清單14-13 通用中介者 public?class?ConcreteMediator?extends?Mediator?{ ?????@Override ?????public?void?doSomething1()?{ ?????????????//調用同事類的方法,只要是public方法都可以調用 ?????????????super.c1.selfMethod1(); ?????????????super.c2.selfMethod2(); ?????} ?????public?void?doSomething2()?{ ?????????????super.c1.selfMethod1(); ?????????????super.c2.selfMethod2(); ?????} } 中介者所具有的方法doSomething1和doSomething2都是比較復雜的業務邏輯,為同事類服務,其實現是依賴各個同事類來完成的。 同事類的基類如代碼清單14-14所示。 代碼清單14-14 抽象同事類 public?abstract?class?Colleague?{ ?????protected?Mediator?mediator; ?????public?Colleague(Mediator?_mediator){ ?????????????this.mediator?=?_mediator; ?????} } 這個基類也非常簡單。一般來說,中介者模式中的抽象都比較簡單,是為了建立這個中介而服務的,具體同事類如代碼清單14-15所示。 代碼清單14-15 具體同事類 public?class?ConcreteColleague1?extends?Colleague?{ ?????//通過構造函數傳遞中介者 ?????public?ConcreteColleague1(Mediator?_mediator){ ?????????????super(_mediator); ?????} ?????//自有方法?self-method ?????public?void?selfMethod1(){ ?????????????//處理自己的業務邏輯 ?????} ?????//依賴方法?dep-method ?????public?void?depMethod1(){ ?????????????//處理自己的業務邏輯 ?????????????//自己不能處理的業務邏輯,委托給中介者處理 ?????????????super.mediator.doSomething1(); ?????} } public?class?ConcreteColleague2?extends?Colleague?{ ?????//通過構造函數傳遞中介者 ?????public?ConcreteColleague2(Mediator?_mediator){ ?????????????super(_mediator); ?????} ?????//自有方法?self-method ?????public?void?selfMethod2(){ ?????????????//處理自己的業務邏輯 ?????} ?????//依賴方法?dep-method ?????public?void?depMethod2(){ ?????????????//處理自己的業務邏輯 ?????????????//自己不能處理的業務邏輯,委托給中介者處理 ?????????????super.mediator.doSomething2(); ?????} } 為什么同事類要使用構造函數注入中介者,而中介者使用getter/setter方式注入同事類呢?這是因為同事類必須有中介者,而中介者卻可以只有部分同事類。
                  <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>

                              哎呀哎呀视频在线观看