模板模式在有些场景下非常好用,传统的模板模式,一般是声明一个抽象类,在抽象类里面实现一些逻辑,但有些方法声明为抽象,由子类实现。但模板模式有个问题:单元测试比较麻烦。因为用到了继承,不好隔离测试。(据说Java创始人说过最后悔的就是加了抽象类)典型代码如下:

public class TemplateMain {

    public void doSomething() {
        //some code
        String method1 = method1();
        System.out.println(method1);
    }

    protected abstract String method1();
}

  经验告诉我们,用聚合而不是继承。那么我们试试用接口聚合进去看看:

public class TemplateMain {
    TemplateInterface templateInterface;

    public void doSomething() {
        //some code
        String method1 = templateInterface.method1();
        System.out.println(method1);
    }

    interface TemplateInterface {
        String method1();
    }
}

  实例化的时候,通过外界注入不同的TemplateInterface,实现模板模式的功能。

  TemplateInterface的子类可以单独测试,TemplateMain用Mock TemplateInterface也可以单独测试。

posted on 2018-05-09 21:09  邓志国  阅读(145)  评论(0编辑  收藏  举报