zoukankan      html  css  js  c++  java
  • 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()).

  • 相关阅读:
    Fedora 18 Beta 天高地厚
    Action script 天高地厚
    DLL动态连接库 天高地厚
    VC下Debug和Release区别
    如何解决"应用程序无法启动,因为应用程序的并行配置不正确"问题
    GetWindowLong (hwnd, 0)
    windows文件关联、打开方式列表之修改注册表攻略
    小游戏开发流程
    常用CHM帮助文档集锦下载
    关于jsp页面传递中文参数乱码的解决
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7760538.html
Copyright © 2011-2022 走看看