template design pattern

/**
 * 模板设计模式:
 * 1.一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
 * 2.各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
 * 3.控制子类的扩展
 * 
 * 利率算法不变,所以放到抽象类中,具体的利率为要变的部分放在子类实现
 * @author confiy
 *
 */
abstract class LoanAccount {

	private double interest; // 利息
	private double fund; // 本金

	public double getFund() {
		return fund;
	}

	public void setFund(double fund) {
		this.fund = fund;
	}

	public double calculateInterest() {

		// 取得利率
		double interestRate = getInterestRate();

		// 利息:本金*算法
		interest = getFund() * interestRate;
		
		return interest;
	}
	
	/**
	 * 不同的类型有不同的利率,有具体的子类实现
	 * @return
	 * 		返回利率
	 */
	protected abstract double getInterestRate();
}

/**
 * 继承父类,并实现方发
 * @author confiy
 *
 */
class Account extends LoanAccount{

	/**
	 * 实现父类获取利率的抽象方法
	 * @return
	 * 		返回利率
	 */
	@Override
	protected double getInterestRate() {
		return 10.0;
	}
}

 

你可能感兴趣的:(设计模式,算法)