本文主要是介绍【编程素质】设计模式-模板方法模式( Template method Pattern ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1,概念
定义一个算法中的操作框架,而将一些步骤延迟到子类中。使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。
模板方法模式是类的行为模式。
2,场景
3,类图
1)抽象类
定义功能时,这些功能由以下几部分组成:
- 模板方法:对外暴露的方法,public,在抽象方法中供外部接口调用。
- 基本方法:
- 抽象方法:模板方法调用的不确定方法,延迟到子类实现。
- 具体方法:不允许子类重写的方法,一般定义为final方法、private方法。
- 钩子方法:对于抽象方法或者接口中定义的方法的一个空实现,给子类留有可扩展的余地。protected方法,对外不可见。
2)抽象类的具体实现
强制实现父类的抽象方法、有选择的实现父类的钩子方法。
4,优缺点
优点:
- 提高代码的复用性
- 提高代码的扩展性
- 符合开闭原则
缺点: - 导致类的数目增加
- 间接地增加了系统实现的复杂度
- 如果父类添加了新的抽象方法,所有子类都需要重新改一遍
5,demo
package com.test.account;
public abstract class Account {/*** 模板方法:* 根具账户不同计算利息数额* @return 返回利息数额*/public final double calculateInterest(){//方法设置为final,拒绝子类复写double interestRate = doCalculateInterestRate();String accountType = doCalculateAccountType();double amount = calculateAmount(accountType);hook();return amount * interestRate;}//定义为保户类型,对外不可见这个方法protected void hook() {//空实现,给子类留有可扩展的余地}/*** 基本方法的声明(由子类实现)* 得到不同账户类型*/protected abstract String doCalculateAccountType();/*** 基本方法的声明(由子类实现)* 得到不同账户利率*/protected abstract double doCalculateInterestRate();/*** 基本方法,根据账户类型,返回数额*/private double calculateAmount(String accountType){double mAmount = 1000.00;//假设return mAmount; }
}
package com.test.account;
/*** 子类实现* 被强制实现父类的2种抽象未知方法* 定期存款账户*/
public class CertificateDepositeAccount extends Account{@Overrideprotected String doCalculateAccountType() {return "Certificate of Deposite";}@Overrideprotected double doCalculateInterestRate() {return 0.05;}
}
package com.test.account;
/*** 子类实现* 被强制实现父类的2种抽象未知方法* 货币市场账户*/
public class MoneyMarketAccount extends Account{@Overrideprotected String doCalculateAccountType() {return "Money Market";}@Overrideprotected double doCalculateInterestRate() {return 0.045;}
}
package com.test.account;public class Client {public static void main(String[] args) {Account account = new MoneyMarketAccount();System.out.println("货币市场账号的利息数额为:" + account.calculateInterest());account = new CertificateDepositeAccount();System.out.println("定期账号的利息数额为:" + account.calculateInterest());}
}
这篇关于【编程素质】设计模式-模板方法模式( Template method Pattern )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!