zoukankan      html  css  js  c++  java
  • 模板方法模式

    模板方法模式

    用于规范某一算法的实现步骤,一般在父类中定义算法的一系列步骤,但不必实现每个步骤,然后子类实现其中具体的步骤,最后执行的顺序按父类中的定义。

    角色:

    接口:定义父类的行为。

    抽象父类:定义步骤的执行顺序和若干步骤的抽象实现或空实现。

    子类:继承父类,实现其抽象步骤或覆写其步骤实现。

    示例:

    public interface ITemplate{
        void method();
    }

    ---抽象模板类

    public abstract class AbstractTemplate implements ITemplate{
    
        // 某算法需要以下5个步骤,顺序必须如下,步骤3可省略
        @Override
        public final void method()
        {
            process_1();
            process_2();
            process_3();
            process_4();
            process_5();
        }
    
        // 父类私有
        private void process_1(){
            System.out.println("步骤1完成...");
        }
    
        // 必须子类实现
        protected abstract void process_2();
    
        // 子类选择性覆盖
        protected void process_3(){    }
    
        // 子类选择性覆盖
        protected void process_4(){
            System.out.println("步骤4完成...");
        }
    
        // 子类不可覆盖
        protected final void process_5(){
            System.out.println("步骤5完成...");
        }
    }

    ---子类

    public class FlowTemplate extends AbstractTemplate{
    
        @Override
        public void process_2(){
            System.out.println("步骤2圆满完成!");
        }
    
        public void process_3(){
            System.out.println("步骤3圆满完成!");
        }
    }

    ---调用

    public class TemplateMethodTest{
    
        public static void main(String[] args){
            ITemplate flow = new FlowTemplate();
            flow.method();
        }
    }

    输出:

    步骤1完成...
    步骤2圆满完成!
    步骤3圆满完成!
    步骤4完成...
    步骤5完成...

    可见在模板的约束下,子类按算法的顺序执行,并且有一定的自由度,自由度可由父类中的关键字定义。 

    end

  • 相关阅读:
    mitmproxy抓包工具
    java基础|int和Integer的区别
    Vue|退出功能
    Vue|分页处理
    apt-get本地软件源搭建
    rqt_plot报错
    创建ROS 工作空间时出现:程序“catkin_init_workspace”尚未安装,程序“catkin_make”尚未安装。
    ubuntu16.04安装ROS
    debian及Ubuntu各版本下载地址获取
    解决sudo rosdep init和rosdep update的错误
  • 原文地址:https://www.cnblogs.com/luangeng/p/6557449.html
Copyright © 2011-2022 走看看