设计模式之模板模型

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();

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值