设计模式之模板方法模式
2017-06-28 18:11
239 查看
先来看下面这个例子,定义一个银行卡抽象类,然后让子类去实现它的抽象方法,抽象类提供一个公有的方法,就是消费,消费的流程是固定的,就是用了什么卡,消费了多少钱;不同的是不同的银行之间。
定义一个抽象类:
定义子类:
定义另一个子类:
测试类
打印结果:
工商 信用卡
减去本次消费*七折
中国银行 储蓄卡
减去本次消费*七五折
总结:
简单来思考,什么是模板方法模式,就是提供一个公有的方法(模板),那么从上面的例子可以看出,首先是定义一个父类,它提供了可以供子类去自定义的方法,同时,也抽取出了子类中共同会存在的代码或者方法。
大家思考一下,父类可以调用子类的方法么?
当然可以,但是会通过反射,带参构造等,这是不提倡的!!!
那么反过头来再思考下,模板方法模式,是不是通过这种迂回的方式达到了这个效果。
模板方法抽象出了公有方法,封装起来,只需要子类去自定义不同的实现就可以了。当然,这会增加子类的数量,毕竟每个实现都要继承父类嘛。
定义一个抽象类:
/** *@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(); } }
打印结果:
工商 信用卡
减去本次消费*七折
中国银行 储蓄卡
减去本次消费*七五折
总结:
简单来思考,什么是模板方法模式,就是提供一个公有的方法(模板),那么从上面的例子可以看出,首先是定义一个父类,它提供了可以供子类去自定义的方法,同时,也抽取出了子类中共同会存在的代码或者方法。
大家思考一下,父类可以调用子类的方法么?
当然可以,但是会通过反射,带参构造等,这是不提倡的!!!
那么反过头来再思考下,模板方法模式,是不是通过这种迂回的方式达到了这个效果。
模板方法抽象出了公有方法,封装起来,只需要子类去自定义不同的实现就可以了。当然,这会增加子类的数量,毕竟每个实现都要继承父类嘛。
相关文章推荐
- 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
- 设计模式学习笔记(十六)——Template Method模板方法模式
- 设计模式笔记 13. TemplateMethod 模板方法模式(行为型模式)
- 设计模式之模板方法模式(Template Method)
- 设计模式学习之 模板方法模式
- 深入浅出Java模式设计之模板方法模式
- 设计模式学习笔记(十六)——Template Method模板方法模式
- 设计模式——模板方法模式(TemplateMethod)
- 深入浅出Java模式设计之模板方法模式
- 设计模式学习日志(14)-TemplateMethod模板方法(行为型模式)
- 设计模式 - Template Method Pattern(模板方法模式)
- 设计模式系列漫谈之六 - 模板方法模式
- 设计模式笔记(十五) —— 模板方法模式
- 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
- 设计模式(七)[模板方法(Template Method)模式]
- 第六个设计模式之:模板方法
- 浅析设计模式之模板方法
- 设计模式一模板方法模式(spring)
- 白话设计模式--行为型模式--Template Method模式(模板方法模式)
- 设计模式(1)- 模板方法 Template Method Pattern