1. 程式人生 > >Java設計模式—模板方法模式

Java設計模式—模板方法模式

模板方法模式僅僅使用了Java的繼承機制,但它是一個應用非常廣泛的模式。


1、定義:一個操作中的演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。2、通用類圖如下:

Abstract Class叫做抽象模板,它的方法分為兩類:模板方法和基本方法。

  • 基本方法:基本方法也叫做基本操作,是由子類實現的方法,並且在模板方法中被呼叫
  • 模板方法:可以有一個或者幾個,一般是具體的方法,也就是一個框架,實現對基本方法的排程,完成固定的邏輯。

具體模板:

     ConcreteClass1和ConcreteClass2屬於具體模板,實現父類所定義的一個或多個抽象方法,也就是父類定義的基本方法在子類中得以實現。


3、通用程式碼如下:

抽象模板類:

public abstract class AbstractClass {
     //基本方法
     protected abstract void doSomething();
     //基本方法
     protected abstract void doAnything();
     //模板方法
     public void templateMethod(){
             /*
              * 呼叫基本方法,完成相關的邏輯
              */
             this.doAnything();
             this.doSomething();
     }
}

具體模板類:

public class ConcreteClass1 extends AbstractClass {
     //實現基本方法
     protected void doAnything() {
             //業務邏輯處理
     }
     protected void doSomething() {
             //業務邏輯處理
     }
}
public class ConcreteClass2 extends AbstractClass {     //實現基本方法
     protected void doAnything() {
             //業務邏輯處理
     }
     protected void doSomething() {
             //業務邏輯處理
     }
}

場景類:

public class Client {
     public static void main(String[] args) {
             AbstractClass class1 = new ConcreteClass1();
             AbstractClass class2 = new ConcreteClass2();               
             //呼叫模板方法
             class1.templateMethod();
             class2.templateMethod();
     }
}

優點:
● 封裝不變部分,擴充套件可變部分
● 提取公共部分程式碼,便於維護
● 行為由父類控制,子類實現



缺點:

       按照我們的設計習慣,抽象類負責宣告最抽象、最一般的事物屬性和方法,實現類完成具體的事物屬性和方法。但是模板方法模式卻顛倒了,抽象類定義了部分抽象方法,由子類實現,子類執行的結果影響了父類的結果,也就是子類對父類產生了影響,這在複雜的專案中,會帶來程式碼閱讀的難度,而且也會讓新手產生不適感。

總結:模板模式就是在模板方法中對基本方法的呼叫。

為了防止惡意的操作,一般模板方法前面會加上final關鍵字,不允許被覆寫。

相關推薦

java設計模式----模板方法模式

抽象類 子類 底層 代碼 做事 方法 模板 期待 代碼復用 模板方法模式:   在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些實現。 好萊塢原則:   別調用(打電話給)我們,我們會調用(打電話給

Java設計模式 - 模板方法模式

Java設計模式 - 模板方法模式 定義一個演算法的骨架,並將一些步驟通過子類表達。   UML圖示 要點 1. 定義一個演算法的骨架 - 建立一個抽象類 2. 將一些步驟通過子類表達 - 子類繼承抽象類 賦予不同實現   模板方法應用例項 模板方法

java設計模式--模板方法模式

1 簡介     定義一個模板結構,將具體內容延遲到子類去實現。它主要作用:在不改變模板結構的前提下在子類中重新定義模板中的內容。 主要兩點      1   提高程式碼複用性  &n

Java設計模式模板方法模式

模板方法模式僅僅使用了Java的繼承機制,但它是一個應用非常廣泛的模式。1、定義:一個操作中的演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。

設計模式簡單介紹(java語言)-- 模板方法模式

設計模式簡單介紹(java語言)– 模板方法模式 模板方法模式的定義 模板方法模式:定義一個操作中的演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。 類圖: 類圖中,Abstrac

Java設計模式-模板方法模式

定義 Define the skeleton of an algorithm in an operation,defer

設計模式 - 模板方法模式

col closed abs concrete style package println -1 san 定義:在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中。 模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。 角色: 抽象類(Ab

設計模式——模板方法模式

調度 pos 開發 switch 需要 邏輯 重新定義 log lighting 模板方法定義 定義一個模板,在父類中抽象部分方法,實現部分方法。將部分方法放在子類來實現,使得子類不改變結構即可重新定義某些特定步驟。 方法角色 (1)基本方法 基本方法,由子類自己去實現

設計模式-模板方法模式(15)

圖片 常見 不改變 UC ted 抽取 nging return 中介者模式 行為型模式(Behavioral Pattern)是對不同的對象之間劃分責任和算法的抽象化。行為型模式包括11種模式:模板方法模式、命令模式、責任鏈模式、策略模式、叠代器模式、中介者模式、觀察者

設計模式-模板方法模式

設計模式 模板方法模式 public abstract class Moban { public string name; public Moban(string _name) { this.name = _name;

PHP設計模式 - 模板方法模式

角色 模板 bstr per eth method php設計模式 public pre 模板模式準備一個抽象類,將部分邏輯以具體方法以及具體構造形式實現,然後聲明一些抽象方法來迫使子類實現剩余的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩余的邏輯有不同的實現

設計模式-模板方法模式(Go語言描述)

這篇文章我們還是繼續我們的設計模式系列, 今天我們帶來的一個全新的設計模式在實際開發中大家肯定都遇到過, 可能大家只是不知道它叫模板方法模式而已, 今天我們就來詳細的說一下什麼是模板方法模式,已經該模式如何運用. 至於什麼是模板方法模式, 我們還是老規矩, 先來個定義, 然後上張類圖

Java學習之模板方法模式

1.2 模板方法模式 父類中,建立了幾個方法,而且指定了做一件事情,需要使用那幾個方法,這些方法的先後順序也已經指定了。 模板方法是程式設計中經常要用到的模式。它定義了一個操作周哦你那個的演算法的骨架,將某些步驟延遲到子類中實現。這樣,子類可以咋不改變演算法的結構下重新定義該演算法的特定步驟

大話設計模式-模板方法模式

模板方法模式 定義一個操作中的演算法的骨架,將一些步驟延遲到子類中。模板方法使得子類可以不改變一個演算法的結構即可重新定義該演算法的某些特定步驟。 模板方法模式是通過把不變的行為搬到超類,去除子類中的重複方法來體現它的優勢。模板方法就是提供了一個很好的程式碼複用平臺。 當不變的和可變的行為在方法的子類實

23種設計模式-模板方法模式【Template Methed】

【釋義】模板方法模式:模板方法模式準備一個抽象類,將部分邏輯以具體方法以及具體構造子的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。先制定一個頂級邏輯框架,而將邏輯的細節留給具體

每日設計模式——模板方法模式

模板方法模式 模板方法模式就是定義一個操作中的演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變一個演算法的結構即可重新定義該演算法的某些特定步驟。 例如:某個特定的應用中具有很多的子任務,每個任務的資料計算步驟幾乎都是一致的,只是具體的實現可能存在一些差別,則可

設計模式---模板方法模式和AsyncTask的原始碼分析

定義:定義一個操作中的方法的框架,將這些方法的具體的實現延遲到子類中實現, 使得子類能夠不改變演算法的結構就能重新定義演算法的內容。也就是流程封裝。 使用場景:程式碼執行的流程是固定的,也就是我們常用的將各個方法抽取的到父類中,然後通過鉤子函式進行約束子類中的行

設計模式——模板方法模式(模板方法模式來寫作文)

本文首發於cdream的個人部落格,點選獲得更好的閱讀體驗! 歡迎轉載,轉載請註明出處。 本文簡單講述了模板方法模式,例子為如何使作文模板來寫作文。如果想進一步,瞭解模板方法,建議讀完後閱讀一下spring中AbstractApplicationContext類的refresh方法或HttpS

C++設計模式——模板方法模式

1定義 定義一個操作的演算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個演算法的結構即可重定義該演算法的某些特定步驟。 實現方案:將演算法/邏輯框架放在抽象基類中,並定義好實現介面,在子類中實現細節介面。 注:策略模式,解決的是相同的問題,只是其方案

框架建立中常見設計模式-模板方法模式

模板方法模式定義:在一個方法中定義一個演算法的骨架,將一些處理的步驟延遲到子類去做處理,可以使在子類不改變演算法結構的情況下, 重新定義演算法的步驟。 設計院原則 好萊塢原則:別調用我們,我們會呼叫你。 先來看下簡單的程式碼實現: 定義一個父類:果汁流程製作 1 package c