<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之旅 廣告
                23.2 門面模式的定義 門面模式(Facade Pattern)也叫做外觀模式,是一種比較常用的封裝模式,其定義如下: Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to use.(要求一個子系統的外部與其內部的通信必須通過一個統一的對象進行。門面模式提供一個高層次的接口,使得子系統更易于使用。) 門面模式注重“統一的對象”,也就是提供一個訪問子系統的接口,除了這個接口不允許有任何訪問子系統的行為發生,其通用類圖,如圖23-4所示。 ![](https://box.kancloud.cn/2016-08-14_57b003690d096.jpg) 圖23-4 擴展后的系統類圖 是的,類圖就這么簡單,但是它代表的意義可是異常復雜,Subsystem Classes是子系統所有類的簡稱,它可能代表一個類,也可能代表幾十個對象的集合。甭管多少對象,我們把這些對象全部圈入子系統的范疇,其結構如圖23-5所示。 ![](https://box.kancloud.cn/2016-08-14_57b0036924343.jpg) 圖23-5 門面模式示意圖 再簡單地說,門面對象是外界訪問子系統內部的唯一通道,不管子系統內部是多么雜亂無章,只要有門面對象在,就可以做到“金玉其外,敗絮其中”。我們先明確一下門面模式的角色。 ● Facade門面角色 客戶端可以調用這個角色的方法。此角色知曉子系統的所有功能和責任。一般情況下,本角色會將所有從客戶端發來的請求委派到相應的子系統去,也就說該角色沒有實際的業務邏輯,只是一個委托類。 ● subsystem子系統角色 可以同時有一個或者多個子系統。每一個子系統都不是一個單獨的類,而是一個類的集合。子系統并不知道門面的存在。對于子系統而言,門面僅僅是另外一個客戶端而已。 我們來看一下門面模式的通用源碼,先來看子系統源代碼。由于子系統是類的集合,因此要描述該集合很花費精力,每一個子系統都不相同,我們使用3個相互無關的類來代表,如代碼清單23-8所示。 代碼清單23-8 子系統 public?class?ClassA?{ ?????public?void?doSomethingA(){ ?????????????//業務邏輯 ?????} } public?class?ClassB?{ ????? ?????public?void?doSomethingB(){ ?????????????//業務邏輯 ?????} } public?class?ClassC?{ ????? ?????public?void?doSomethingC(){ ?????????????//業務邏輯 ?????} } 我們認為這3個類屬于近鄰,處理相關的業務,因此應該被認為是一個子系統的不同邏輯處理模塊,對于此子系統的訪問需要通過門面進行,如代碼清單23-9所示。 代碼清單23-9 門面對象 public?class?Facade?{ ?????//被委托的對象 ?????private?ClassA?a?=?new?ClassA(); ?????private?ClassB?b?=?new?ClassB(); ?????private?ClassC?c?=?new?ClassC(); ?????//提供給外部訪問的方法 ?????public?void?methodA(){ ?????????????this.a.doSomethingA(); ?????} ????? ?????public?void?methodB(){ ?????????????this.b.doSomethingB(); ?????} ????? ?????public?void?methodC(){ ?????????????this.c.doSomethingC(); ?????} }
                  <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>

                              哎呀哎呀视频在线观看