在类中定义了某个算法的骨架,但不具体实现,而在其子类中实现,例如,银行计算利息,都是利率乘以本金和存款时间,但各种存款方式计算利率的方式不同,所以,在账户这个类的相关方法里,只搭出算法的骨架,但不具体实现。具体实现由各个子类来完成;以上定义算法骨架由子类实现的设计模式称之为模板方法模式。
父类:
/**
* 账户类
* @author mrchai
*/
public abstract class Account {
private double interest; //利息
private double fund; //本金
public Account(double fund) {
this.fund = fund;
}
/**
* 获取利息
* @return
*/
public double getInterest(){
return fund * getInterestRate();
}
/**
* 由于不同存款类型和时间决定不同的利率,所以利率的获取无法直接确定
* @return
*/
public abstract double getInterestRate();
}
子类A:
/**
* 定期账户
* @author mrchai
*/
public class AccountTypeA extends Account{
private int year; //存款年限
private double base = 0.01; //基本利率
public AccountTypeA(double fund,int year) {
super(fund);
this.year = year;
}
@Override
public double getInterestRate() {
return year * base;
}
}
子类B:
/**
* 活期账户
* @author mrchai
*
*/
public class AccountTypeB extends Account {
private double base = 0.005;//基本利率
public AccountTypeB(double fund) {
super(fund);
}
@Override
public double getInterestRate() {
return base;
}
}