zoukankan      html  css  js  c++  java
  • 模板模式变形

    模板模式在有些场景下非常好用,传统的模板模式,一般是声明一个抽象类,在抽象类里面实现一些逻辑,但有些方法声明为抽象,由子类实现。但模板模式有个问题:单元测试比较麻烦。因为用到了继承,不好隔离测试。(据说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也可以单独测试。

  • 相关阅读:
    POJ 2253 Frogger
    POJ 2387
    codevs3981动态最大子段和(线段树)
    P3398仓鼠(LCA)
    codevs1036商务旅行(LCA)
    codevs3728联合权值(LCA)
    P3390矩阵快速幂
    codevs1574广义斐波那契数列
    POJ3070Fibonacci
    P3379最近公共祖先(LCA)
  • 原文地址:https://www.cnblogs.com/bobdeng/p/9016660.html
Copyright © 2011-2022 走看看