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

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

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

  • 相关阅读:
    Lighting maps_练习二
    Lighting maps_练习一
    Materials_练习
    Basic Lighting_练习二
    *201809-3
    程序设计思维与实践 Week14 作业 (3/4/数据班)
    程序设计思维与实践 Week14 限时大模拟 (3/4/数据班)
    程序设计思维与实践 Week15 作业 (3/4/数据班)
    程序设计思维与实践CSP-M4补题
    CCF201609-3
  • 原文地址:https://www.cnblogs.com/Kevin-1992/p/12608415.html
Copyright © 2011-2022 走看看