Java设计模式(16)——行为模式之模板方法模式(Template)

一、概念

  概念

  

   UML简图

  

   角色

  

 

   使用场景

  其实我们常用得抽象类就是这个模式得运用,所以基本上属于比较好理解的一种模式。

 二、实践

  根据上述角色,给出相应代码

  抽象模板

/**
 * 抽象模板
 *
 * @author Administrator
 **/
public abstract class AbstractTemplate {
    /**
     * 模板方法的声明和实现
     */
    public void templateMethod() {
        // 调用由子类实现的方法
        operation1();
        operation2();
        // 调用已经实现的方法
        operation3();
    }
    public abstract void operation1();
    public abstract void operation2();
    private final void operation3() {
        // 已经实现
    }
}

  具体模板

/**
 * 具体模板
 *
 * @author Administrator
 **/
public class ConcreteTemplate extends AbstractTemplate{
    @Override
    public void operation1() {
        // 基本方法实现
    }

    @Override
    public void operation2() {
        // 基本方法实现
    }
}

   至于使用就很简单了:

 public static void main(String[] args) {
        AbstractTemplate template = new ConcreteTemplate();
        template.templateMethod();
    }

三、改进与思考

  模板方法的核心就是“好莱坞原则”——子类可以替换掉父类的可变部分,但不能改变顶级逻辑。

  其他注意点

  

  模板方法的理念就是应当尽量减少子类重写父类的基本方法

  命名方面

  钩子方法应当以do开头,这在web里面的httpServlet里可以具体看到!

  关于重构

  大方法应当打散,改为模板方法进行调用。如果有局部变量的声明,可以通过一个专用的取值方法进行处理。

  重构的一个方向便是尽量将行为往高端移动,而状态往子类走,尽量将状态的声明延迟到子类,这样就可以实现行为和状态的分离。如果上层抽象类中确实需要用到状态,则使用相应的取值方法(get()).

posted @ 2017-10-31 11:10  ---江北  阅读(251)  评论(0编辑  收藏  举报
TOP