Java: Template Method Pattern
/**
* 版权所有 2022 涂聚文有限公司
* 许可信息查看:
* 描述:
* 模板方法模式 Template Method Patterns
* 历史版本: JDK 14.02
* 2022-09-12 创建者 geovindu
* 2022-09-12 添加 Lambda
* 2022-09-12 修改:date
* 接口类
* 2022-09-12 修改者:Geovin Du
* 生成API帮助文档的指令:
*javadoc - -encoding Utf-8 -d apidoc Account.java
*
* */
package com.javapatterns.templatemethod;
/**
*抽象类 账号
* @author geovindu
*
* */
abstract public class Account {
/**
*
*
* */
protected String accountNumber;
/**
*
*
* */
public Account()
{
accountNumber = null;
}
/**
*
*
* */
public Account(String accountNumber)
{
this.accountNumber = accountNumber;
}
/**
* 模板方法,计算利息数据数额
* @return 返回利息数额
* */
final public double calculateInterest()
{
double interestRate = doCalculateInterestRate();
String accountType = doCalculateAccountType();
double amount = calculateAmount(accountType, accountNumber);
return amount * interestRate;
}
/**
*基本方法留给子类实现
*账户类型
* @return
* */
abstract protected String doCalculateAccountType() ;
/**
*基本方法留给子类实现
* @return
* */
abstract protected double doCalculateInterestRate() ;
/**
*基本方法已经实现
* @param accountType 输入类型
* @param accountNumber 数字类型
* @return
* */
final public double calculateAmount(String accountType, String accountNumber)
{
this.accountNumber=accountNumber;
double rs=3.00D;
if(accountType=="Certificate of Deposite" && accountNumber=="1")
{
rs=8888.00D;
}
if(accountType=="Certificate of Deposite" && accountNumber=="2")
{
rs=100000.00D;
}
if(accountType=="Money Market" && accountNumber=="1")
{
rs=8888.00D;
}
if(accountType=="Money Market" && accountNumber=="2")
{
rs=100000.00D;
}
return rs;
}
}
/**
* 版权所有 2022 涂聚文有限公司
* 许可信息查看:
* 描述:
* 模板方法模式 Template Method Patterns
* 历史版本: JDK 14.02
* 2022-09-12 创建者 geovindu
* 2022-09-12 添加 Lambda
* 2022-09-12 修改:date
* 接口类
* 2022-09-12 修改者:Geovin Du
* 生成API帮助文档的指令:
*javadoc - -encoding Utf-8 -d apidoc MoneyMarketAccount.java
*
* */
package com.javapatterns.templatemethod;
/**
*货币市场账号
* @author geovindu
*
* */
public class MoneyMarketAccount extends Account {
/**
*基本方法这里实现
*
* @return
* */
public String doCalculateAccountType()
{
return "Money Market";
}
/**
*基本方法这里实现
*利率
* @return
* */
public double doCalculateInterestRate()
{
return 0.045D;
}
}
/**
* 版权所有 2022 涂聚文有限公司
* 许可信息查看:
* 描述:
* 模板方法模式 Template Method Patterns
* 历史版本: JDK 14.02
* 2022-09-12 创建者 geovindu
* 2022-09-12 添加 Lambda
* 2022-09-12 修改:date
* 接口类
* 2022-09-12 修改者:Geovin Du
* 生成API帮助文档的指令:
*javadoc - -encoding Utf-8 -d apidoc CDAccount.java
*
* */
package com.javapatterns.templatemethod;
/**
*具体子类 定期存款账号
* @author geovindu
* */
public class CDAccount extends Account {
/**
*基本方法这里实现
* @return
* */
public String doCalculateAccountType()
{
return "Certificate of Deposite";
}
/**
*基本方法这里实现
*利率
* @return
* */
public double doCalculateInterestRate()
{
return 0.065D;
}
}
调用测试:
//模板方法模式
Account acct = null;
acct = new MoneyMarketAccount();
acct.calculateAmount("Money Market","1");
System.out.println("Amount: 8888.00DInterest earned from Money Market account = " + acct.calculateInterest());
acct = new CDAccount();
acct.calculateAmount("Certificate of Deposite","1");
System.out.println("Amount: 8888.00D Interest earned from CD account = " + acct.calculateInterest());
acct = new MoneyMarketAccount();
acct.calculateAmount("Money Market","2");
System.out.println("Amount: 100000.00D Interest earned from Money Market account = " + acct.calculateInterest());
acct = new CDAccount();
acct.calculateAmount("Certificate of Deposite","2");
System.out.println("Amount: 100000.00D Interest earned from CD account = " + acct.calculateInterest());
输出:
Amount: 8888.00DInterest earned from Money Market account = 399.96 Amount: 8888.00D Interest earned from CD account = 577.72 Amount: 100000.00D Interest earned from Money Market account = 4500.0 Amount: 100000.00D Interest earned from CD account = 6500.0
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号