设计模式 之 模板方法模式
来源:互联网 发布:linux目录权限 编辑:程序博客网 时间:2024/06/08 10:37
使用场景
考虑一个计算存款利息的例子。假设系统需要支持两种存款账号,即货币市场(Money Market)账号和定期存款(Certificate of Deposite)账号。这两种账号的存款利息是不同的,因此,在计算一个存户的存款利息额时,必须区分两种不同的账号类型。
这个系统的总行为应当是计算出利息,这也就决定了作为一个模板方法模式的顶级逻辑应当是利息计算。由于利息计算涉及到两个步骤:一个基本方法给出账号种类,另一个基本方法给出利息百分比。这两个基本方法构成具体逻辑,因为账号的类型不同,所以具体逻辑会有所不同。
显然,系统需要一个抽象角色给出顶级行为的实现,而将两个作为细节步骤的基本方法留给具体子类实现。由于需要考虑的账号有两种:一是货币市场账号,二是定期存款账号。系统的类结构如下图所示。
源代码
抽象模板角色类
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; }}具体模板角色类
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()); }}
0 0
- 设计模式之模板方法模式模板方法模式
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- Java设计模式之模板方法模式
- 正则表达式
- 简单的removeView和AddView测试
- Converts Blast database format in FASTA format
- Memcache知识点梳理
- Entity Framework Model First
- 设计模式 之 模板方法模式
- 把字符串转换成整数
- jqgrid删除行
- Java集合框架(List, Set, Map, Collections)
- C语言学习11
- svn linux服务器回退版本
- dom4j操作xml文件整理
- Lombok 学习
- Android线程池详解