java设计模式——模板模式

本文深入讲解模板方法模式,一种允许子类在不改变算法结构的情况下,重新定义算法步骤的行为性设计模式。通过定义算法骨架,将可变行为留给子类实现,避免代码重复。文章以JdbcTemplate等实例说明其应用。

名词解释

Template Method Pattern,又叫 模板方法模式

指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为性设计模式

适用场景

  1. 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
  2. 各子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复

实现思路

为了达到各个类都实现相同的处理步骤,可以用一个父类的某个方法来定规定我们每一步的操作功能已经各步骤的执行顺序,这个方法就是模板方法,同时,在这些规定好的步骤中,有些我们步骤可能是每一步都是一样的,也有可能各个子类会各有不同,有些步骤是子类可以用父类的,也可以支持自己自定的,为了实现灵活的需求,很容易就想到 抽象类

定义模板类:

public abstract class DefineStep {

    public final void entrance(){ //模板入口,在这里规定各个步骤的调用顺序,这一步是不允许各子类修改的,所以定义为 final
        stepOne();
        stepTwo();
        stepThree();
    }

    protected void stepOne(){
        //这一步,可以有父类的实现,也可以让子类来自己实现,所以定义为 可继承的
        System.out.println("父类的步骤1,可以用我的,也可以用你自己的");
    };
    protected abstract void stepTwo(); //这一步是抛出给各个子类来自行实现的,父类完全不管,子类必须要自己实现,所以定义为 abstract

    protected final void stepThree(){
        //假设第一步都是一样的,且不允许各子类有自己的个性化实现,所以定义为final
        System.out.println("这里就必须用我的");
    };

}

在各子类中可以分别实现或者继承个别步骤

public class ChildOne extends DefineStep {
    @Override
    protected void stepTwo() {
        System.out.println("这里我第一个孩子的第二步");
    }
}

再如:

public class ChildTwo extends DefineStep {
    @Override
    protected void stepTwo() {
        System.out.println("这里我第二个孩子的第二步");
    }

    @Override
    protected void stepOne() {
        System.out.println("我不打算用你的第一步了");
    }
}

应用举例

  • JdbcTemplate
  • AbstractList
package java.util;
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
...
abstract public E get(int index);
...
}
  • AbstractSet、AbstractMap
  • HttpServlet(service()、doGet()、doPost())
  • MyBatis 的 BaseExecutor 类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值