模板模式

  • 模板模式

关心的是流程
执行流程固定,但中间有些步骤有细微差别

如:SpringJDBC

    是java规范,各个数据库厂商自己去实现
    1、加载驱动类DriverManager
    2、建立连接
    3、创建语句集(标准语句集、预处理语句集)(语句集?  MySQL、Oracle、SQLServer、Access)
    4、执行语句集
    5、结果集ResultSet 游标
    ORM(?)

public abstract class Packing {
    protected final void start(){
        this.open();
        if (needBlock()){
            this.block();
        }
        this.push();
        this.close();
    }
    abstract void block();

    //钩子方法:实现流程的微调
    protected boolean needBlock(){
        return false;
    }

    final void close(){
        System.out.println("关闭冰箱");
    }

    protected abstract void push();

    final void open(){
        System.out.println("打开冰箱");
    }
}

public class Elephant extends Packing {
    private boolean needBlock = false;

    public Elephant(boolean needBlock) {
        this.needBlock = needBlock;
    }

    @Override
    void block() {
        System.out.println("将大象分块");
    }

    @Override
    protected void push() {
        System.out.println("放入冰箱");
    }

    @Override
    protected boolean needBlock() {
        return this.needBlock;
    }
}

public class Pig extends Packing {
    @Override
    void block() {
        System.out.println("将猪分块");
    }

    @Override
    protected void push() {
        System.out.println("放入冰箱");
    }
}

public class Test {
    public static void main(String[] args){
        Packing elephant = new Elephant(true);
        elephant.start();
        Packing pig = new Pig();
        pig.start();
    }
}

模板模式的优缺点

  • 优点:
  1. 利用模板方法将相同处理逻辑的代码放到抽象父类中,可以提高代码的复用性。
  2. 将不同的代码不同的子类中,通过对子类的扩展增加新的行为,提高代码的扩展性。
  3. 把不变的行为写在父类上,去除子类的重复代码,提供了一个很好的代码复用平台, 符合开闭原则。
  • 缺点:
  1. 类数目的增加,每一个抽象类都需要一个子类来实现,这样导致类的个数增加。
  2. 类数量的增加,间接地增加了系统实现的复杂度。
  3. 继承关系自身缺点,如果父类添加新的抽象方法,所有子类都要改一遍
posted @ 2019-02-13 20:26  fly_bk  阅读(133)  评论(0编辑  收藏  举报