设计模式之模板方法模式

先来看下面这个例子,定义一个银行卡抽象类,然后让子类去实现它的抽象方法,抽象类提供一个公有的方法,就是消费,消费的流程是固定的,就是用了什么卡,消费了多少钱;不同的是不同的银行之间。

定义一个抽象类:

/**
 *@className Bankcard
 *@description :定义一个抽象类银行卡;其中减钱 和  使用的方式是抽象的,需要子类定义,
 *
 *定义一个公有方法 consume();消费的方式都是一样的,那就是使用了什么卡,减去了多少钱。
 *
 * 	
 *@date 2017年6月28日下午5:55:19
 *
 */
public abstract class Bankcard {
	
	public abstract void cut();
	
	public abstract void type();
	
	public void consume(){
		this.type();
		this.cut();
	}
	
}

定义子类:

//定义 工商银行的实现类
public class ICBCBankcard extends Bankcard{

	@Override
	public void cut() {
		System.out.println("减去本次消费*七折");
	}

	@Override
	public void type() {
		System.out.println("工商 信用卡");
	}

}

定义另一个子类:

//定义中国银行的实现类
public class BOCBankcard extends Bankcard{

	@Override
	public void cut() {
		System.out.println("减去本次消费*七五折");
	}

	@Override
	public void type() {
		System.out.println("中国银行 储蓄卡");
	}

}

测试类

public class BankcardClient {
	public static void main(String[] args) {
		ICBCBankcard ib = new ICBCBankcard();
		ib.consume();
		
		BOCBankcard bb = new BOCBankcard();
		bb.consume();
	}
}

打印结果:
工商 信用卡
减去本次消费七折
中国银行 储蓄卡
减去本次消费
七五折

总结:
简单来思考,什么是模板方法模式,就是提供一个公有的方法(模板、流程方法),那么从上面的例子可以看出,首先是定义一个抽象父类,它提供了可以供子类去实现自定义的方法,同时,也抽取出了子类中共同会存在的代码或者方法(或者说是一个流程性很强的方法!)。
大家思考一下,父类可以调用子类的方法么?
当然可以,但是会通过反射,带参构造等,这是不提倡的!!!
那么反过头来再思考下,模板方法模式,是不是通过这种迂回的方式达到了这个效果。
模板方法抽象出了公有方法,封装起来,只需要子类去自定义不同的实现就可以了。当然,这会增加子类的数量,毕竟每个实现都要继承父类嘛。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值