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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                10.2 模板方法模式的定義 模板方法模式(Template Method Pattern)是如此簡單,以致讓你感覺你已經能夠掌握其精髓了。其定義如下: Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.(定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。) 模板方法模式的通用類圖如圖10-3所示。 ![](https://box.kancloud.cn/2016-08-14_57b003617835b.jpg) 圖10-3 修改后的悍馬車模類圖 模板方法模式確實非常簡單,僅僅使用了Java的繼承機制,但它是一個應用非常廣泛的模式。其中,AbstractClass叫做抽象模板,它的方法分為兩類: ● 基本方法 基本方法也叫做基本操作,是由子類實現的方法,并且在模板方法被調用。 ● 模板方法 可以有一個或幾個,一般是一個具體方法,也就是一個框架,實現對基本方法的調度,完成固定的邏輯。 注意 為了防止惡意的操作,一般模板方法都加上final關鍵字,不允許被覆寫。 在類圖中還有一個角色:具體模板。ConcreteClass1和ConcreteClass2屬于具體模板,實現父類所定義的一個或多個抽象方法,也就是父類定義的基本方法在子類中得以實現。 我們來看其通用代碼,AbstractClass如代碼清單10-6所示。 代碼清單10-6 抽象模板類 public?abstract?class?AbstractClass?{ ?????//基本方法 ?????protected?abstract?void?doSomething(); ?????//基本方法 ?????protected?abstract?void?doAnything(); ?????//模板方法 ?????public?void?templateMethod(){ ?????????????/* ??????????????*?調用基本方法,完成相關的邏輯 ??????????????*/ ?????????????this.doAnything(); ?????????????this.doSomething(); ?????} } 具體模板如代碼清單10-7所示。 代碼清單10-7 具體模板類 public?class?ConcreteClass1?extends?AbstractClass?{ ?????//實現基本方法 ?????protected?void?doAnything()?{ ?????????????//業務邏輯處理 ?????} ?????protected?void?doSomething()?{ ?????????????//業務邏輯處理 ?????} } public?class?ConcreteClass2?extends?AbstractClass?{ ?????//實現基本方法 ?????protected?void?doAnything()?{ ?????????????//業務邏輯處理 ?????} ?????protected?void?doSomething()?{ ?????????????//業務邏輯處理 ?????} } 場景類如代碼清單10-8所示。 代碼清單10-8 場景類 public?class?Client?{ ?????public?static?void?main(String[]?args)?{ ?????????????AbstractClass?class1?=?new?ConcreteClass1(); ?????????????AbstractClass?class2?=?new?ConcreteClass2();??????????????? ?????????????//調用模板方法 ?????????????class1.templateMethod(); ?????????????class2.templateMethod(); ?????} } 注意 抽象模板中的基本方法盡量設計為protected類型,符合迪米特法則,不需要暴露的屬性或方法盡量不要設置為protected類型。實現類若非必要,盡量不要擴大父類中的訪問權限。
                  <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>

                              哎呀哎呀视频在线观看