zoukankan      html  css  js  c++  java
  • 模板模式Template Method

    简介

    模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结构即可重定义算法的某些特定步骤。

    角色

    抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
    具体类(ConcreteClass):实现抽象类中的抽象方法,以完成完整的算法。

    类图

    示例

    抽象

    public abstract class AbstractTemplate {
        /**
         * 模板方法
         */
        public void templateMethod() {
            abstractMethod();
            hookMethod();
            concreteMethod();
        }
    
        /**
         * 虚拟方法的声明(由子类实现)
         */
        protected abstract void abstractMethod();
    
        /**
         * 钩子方法
         * 默认or空 如果子类实现就附加业务
         */
        protected void hookMethod() {
            System.out.println("钩子方法:空或者默认");
        }
    
        /**
         * 基本方法(已经实现)
         */
        private void concreteMethod() {
            //具体业务
            System.out.println("具体实现方法");
        }
    }

    具体

    public class ConcreteTemplate extends AbstractTemplate {
        //基本方法的实现
        protected void abstractMethod() {
            //业务相关的代码
            System.out.println("实现虚拟方法");
        }
    
        //重写父类的方法 按业务需求 是否重写钩子方法
        @Override
        protected void hookMethod() {
            //业务相关的代码
            System.out.println("钩子方法");
        }
    }

    Head First 设计模式(中文版)的示例:

    码云地址:https://gitee.com/manusas/TemplateMethod

  • 相关阅读:
    为什么hive表有数据,但count(*)返回0
    数仓建设时,要建历史表,用于保存历史数据,用于日后出问题时,起修复数据的作用。按日期分区,每天都把所有的数据存到当天的分区里
    get_json_object用以获取json类型的字段的值
    str_to_map语句,字符串类型变map类型
    按更新时间取最新记录
    hive临时表
    数仓分层
    次日留存、七日留存
    转义
    数据库三范式
  • 原文地址:https://www.cnblogs.com/manusas/p/8329532.html
Copyright © 2011-2022 走看看