淺談模板方法模式
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u010741376/article/details/45967973
模板方法模式是類的行為模式。準備一個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。模板方法名字的由來:模板方法模式需要開發抽象類和具體子類的設計師之間的協作。一個設計師負責給出一個演算法的輪廓和骨架,另一些設計師則負責給出這個演算法的各個邏輯步驟。代表這些具體邏輯步驟的方法稱做基本方法(primitive
method);而將這些基本方法彙總起來的方法叫做模板方法(template method),這個設計模式的名字就是從此而來。
模板方法模式中的方法
模板方法中的方法可以分為兩大類:模板方法和基本方法。
模板方法
一個模板方法是定義在抽象類中的,把基本操作方法組合在一起形成一個總演算法或一個總行為的方法。
一個抽象類可以有任意多個模板方法,而不限於一個。每一個模板方法都可以呼叫任意多個具體方法。
基本方法
基本方法又可以分為三種:抽象方法(Abstract Method)、具體方法(Concrete Method)和鉤子方法(Hook Method)。
● 抽象方法:一個抽象方法由抽象類宣告,由具體子類實現。在Java語言裡抽象方法以abstract關鍵字標示。
● 具體方法:一個具體方法由抽象類宣告並實現,而子類並不實現或置換。
● 鉤子方法:一個鉤子方法由抽象類宣告並實現,而子類會加以擴充套件。通常抽象類給出的實現是一個空實現,作為方法的預設實現。
例項:
抽象模板角色類:
/**
* 模板方法模式
* @author Administrator
*
*/
public abstract class Account {
/**
* 計算利息數額
* @return 返回利息數額
*/
public final double calculateInterest(){
double interestRate =doCalculateInterestRate();
String accountType =doCalculateAccountType();
double amount=calculateAmount(accountType);
return amount*interestRate;
}
//基本方法需要子類實現
protected abstract String doCalculateAccountType();
//基本方法需要子類實現
protected abstract double doCalculateInterestRate();
//基本方已實現
private double calculateAmount(String accountType){
return 7243.00;
}
}
具體模板角色類:
/**
* 具體模板實現類
* @author Administrator
*
*/
public class MoneyMarketAccount extends Account {
@Override
protected String doCalculateAccountType() {
return "Money Market";
}
@Override
protected double doCalculateInterestRate() {
return 0.045;
}
}
public class CDAccount extends Account {
@Override
protected String doCalculateAccountType() {
return "Certificate of Deposite";
}
@Override
protected double doCalculateInterestRate() {
return 0.06;
}
}
客戶端類:
public class Client {
public static void main(String[] args) {
Account account=new MoneyMarketAccount();
System.out.println("貨幣市場賬號的利息數額為:" + account.calculateInterest());
account = new CDAccount();
System.out.println("定期賬號的利息數額為:" + account.calculateInterest());
}
}
相關文章
- 設計模式漫談之模板方法設計模式
- 談一談我對‘模板方法’設計模式的理解(Template)設計模式
- 模板方法模式模式
- 模板方法模式(Template)模式
- javascript模板方法模式JavaScript模式
- 策略模式與模板方法模式模式
- 設計模式-模板方法模式設計模式
- 設計模式 ——— 模板方法模式設計模式
- 命令模式 & 策略模式 & 模板方法模式
- 淺談策略模式(strategy)模式
- 淺談顏色模式模式
- 淺談工廠模式模式
- Java設計模式-模板方法模式Java設計模式
- 設計模式之【模板方法模式】設計模式
- js設計模式--模板方法模式JS設計模式
- 設計模式之模板方法模式設計模式
- 設計模式-模板方法模式.md設計模式
- 設計模式(五)——模板方法模式設計模式
- 淺談設計模式——工廠模式設計模式
- 淺談設計模式——單例模式設計模式單例
- 模板方法設計模式設計模式
- 【設計模式】--模板方法設計模式
- 學習方法淺談
- PHP設計模式之模板方法模式PHP設計模式
- 簡說設計模式——模板方法模式設計模式
- python設計模式-模板方法模式Python設計模式
- 設計模式實戰-模板方法模式設計模式
- 極簡設計模式-模板方法模式設計模式
- 【大話設計模式】—— 模板方法模式設計模式
- 淺談設計模式之觀察者模式設計模式
- 設計模式之模板方法設計模式
- 聊一聊模板方法模式模式
- 模板方法模式深度解析(三)模式
- 模板方法模式深度解析(二)模式
- 模板方法模式深度解析(一)模式
- 淺談graphql的訂閱模式模式
- 淺談MVC/MVP/MVVM模式(概述)MVCMVPMVVM模式
- 淺談tomcat執行模式Tomcat模式