zoukankan      html  css  js  c++  java
  • 设计模式之模板方法模式

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

    定义一个抽象类:

    /**
     *@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();
        }
    }

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

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

  • 相关阅读:
    【HDOJ】2774 Shuffle
    【POJ】2170 Lattice Animals
    【POJ】1084 Square Destroyer
    【POJ】3523 The Morning after Halloween
    【POJ】3134 Power Calculus
    【Latex】如何在Latex中插入伪代码 —— clrscode3e
    【HDOJ】4801 Pocket Cube 的几种解法和优化
    【HDOJ】4080 Stammering Aliens
    【HDOJ】1800 Flying to the Mars
    SQL语法
  • 原文地址:https://www.cnblogs.com/Kevin-1992/p/12608415.html
Copyright © 2011-2022 走看看