设计模式之模板模型
package TemplateModel;
/**
* 模板模型使得子类可以在不改变一个算法结构的前提下,
* 重定义该算法的某些特定的步骤
* 此模式一般适用以下情况:
* 1、一次性实现一个业务(算法)不变的部分,将其可变的行为留给子类去实现
* 2、将各个子类通用的公共的行为提取出来,集中到一个公共父类中以避免代码重复
* @author Administrator
* 例如:以一个简单的购物处理业务为例,业务是根据物品的单价和数量,算出总价,
* 检查客户账户是否有足够的余额购买,若余额不足,终止交易;否则,就进行交易从
* 客户账户扣除商品的价格。
*
* 现在此抽象类的实现类只需要实现整个购物逻辑中的特定几个子方法就可以了
* 子类集中于实现基本的操作,把抽象方法定义成protected的目的是:
* 让客户调用看不到,从而不必关心具体实现细节
*/
public abstract class IShopping {
/**
* 因为总的业务逻辑不变,定义一个final方法,以便这个工作逻辑不被
* 其他子类更改
* @param c 客户
* @param price 单价
* @param num 数量
*/
public final void buyOrder(Customer c,float price,int num){
float total = price*num;
if(checkBalance(c,total)){
float money = deduct(c,total);
System.out.println("客户:"+c.getName()+"购买成功,余额:"+money);
}else
System.out.println("客户:"+c.getName()+"余额不足!");
log();
}
/**
* 检查客户余额
*/
protected abstract boolean checkBalance(Customer c,float total);
/**
* 扣除款项
*/
protected abstract float deduct(Customer c,float total);
/**
* 记录购物清单
*/
protected abstract void log();
}