zoukankan      html  css  js  c++  java
  • 模板设计模式

    模板设计模式

    概述

    模板设计模式定义:  定义一个操作中的算法骨架, 将步骤延迟到子类中.
    模板设计模式是一种**行为设计模式**, 一般是准备一个抽象类, 将部分逻辑以具体方法或者具体的构造函数实现,  然后声明一些抽象方法, 这样可以强制子类实现剩余的逻辑.  不同的子类以不同的方式实现这些抽象方法. 从而对剩余的逻辑有不同的实现. 这就是模板设计模式能达成的功能.
    适用于一些复杂操作进行步骤分割, 抽取公共部分由抽象父类实现, 将不同的部分在父类中定义抽象实现, 而将具体实现过程由子类完成.  对于整体步骤很固定,  但是某些部分易变, 可以将易变的部分抽取出来, 供子类实现.
    
    角色:
    	抽象类:  实现模板方法, 定义算法骨架
    	具体类:  实现抽象类中的抽象方法, 完成特定的算法.
    

    代码演示

    public class TemplatePatternDemo {
        public static void main(String[] args) {
            new Coffee().doMake("把咖啡放入杯中", "加牛奶和糖");
            System.out.println();
            new Tea().make();
        }
    }
    
    // 冲饮料
    abstract class Beverages {
    
        public final void make() {
            boilWater();            // 1. 把水烧开
            pourInCup();            // 2. 把杯子准备好, 原材料放到杯中.
            brew();                 // 3. 用水冲泡
            addIngredients();       // 4. 添加配料
        }
    
        protected abstract void pourInCup();
        protected abstract void addIngredients();
    
        private void boilWater() {
            System.out.println("1, 烧开水,烧到100度可以起锅了");
        }
        private void brew() {
            System.out.println("3. 将开水放入杯中进行冲泡");
        }
    }
    
    // 冲咖啡
    class Coffee extends Beverages {
    
        private String secondStep;
        private String fourthStep;
    
        public void doMake(String secondStep, String fourthStep) {
            this.secondStep = secondStep;
            this.fourthStep = fourthStep;
            make();
        }
    
        @Override
        protected void pourInCup() {
            System.out.println("2. " + secondStep);
        }
    
        @Override
        protected void addIngredients() {
            System.out.println("4. " + fourthStep);
        }
    }
    
    // 喝茶
    class Tea extends Beverages {
        @Override
        protected void pourInCup() {
            System.out.println("2. 把茶叶放入杯中");
        }
        @Override
        protected void addIngredients() {
            System.out.println("4. 添加蜂蜜");
        }
    }
    

    运行结果如下
    运行结果

    参考文章

    java模板设计模式 - yefengyu - 博客园
    java中模板设计模式_java_yk_good的博客-CSDN博客
    spring源码解读之 JdbcTemplate源码_Java_荒野哞的专栏-CSDN博客

  • 相关阅读:
    Linux在线或者离线安装gitlab
    Linux如何安装rpm文件
    使用docker run启动并进入一个容器
    docker导入导出镜像
    Mycat学习笔记一
    Mysql源码安装过程中可能碰到的问题
    当idea的maven项目没有.iml文件导致打开失败时
    从Vue.js窥探前端行业
    CSS 的overflow:hidden 属性详细解释
    win7系统Myeclipse下切换SVN用户
  • 原文地址:https://www.cnblogs.com/bobo132/p/13950337.html
Copyright © 2011-2022 走看看