当前位置: 首页 > news >正文

设计模式系列(图文解析,附带源码) - 模板方法

模板方法(Template Method)

Intent

定义算法框架,并将一些步骤的实现延迟到子类。

通过模板方法,子类可以重新定义算法的某些步骤,而不用改变算法的结构。

Class Diagram


Implementation

冲咖啡和冲茶都有类似的流程,但是某些步骤会有点不一样,要求复用那些相同步骤的代码。


public abstract class CaffeineBeverage {

    final void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    abstract void brew();

    abstract void addCondiments();

    void boilWater() {
        System.out.println("boilWater");
    }

    void pourInCup() {
        System.out.println("pourInCup");
    }
}
public class Coffee extends CaffeineBeverage {
    @Override
    void brew() {
        System.out.println("Coffee.brew");
    }

    @Override
    void addCondiments() {
        System.out.println("Coffee.addCondiments");
    }
}
public class Tea extends CaffeineBeverage {
    @Override
    void brew() {
        System.out.println("Tea.brew");
    }

    @Override
    void addCondiments() {
        System.out.println("Tea.addCondiments");
    }
}
public class Client {
    public static void main(String[] args) {
        CaffeineBeverage caffeineBeverage = new Coffee();
        caffeineBeverage.prepareRecipe();
        System.out.println("-----------");
        caffeineBeverage = new Tea();
        caffeineBeverage.prepareRecipe();
    }
}
boilWater
Coffee.brew
pourInCup
Coffee.addCondiments
-----------
boilWater
Tea.brew
pourInCup
Tea.addCondiments

JDK

  • java.util.Collections#sort()
  • java.io.InputStream#skip()
  • java.io.InputStream#read()
  • java.util.AbstractList#indexOf()

相关文章:

  • 设计模式系列(图文解析,附带源码) - 生成器
  • 设计模式系列(图文解析,附带源码) - 适配器
  • 一文搞定设计模式!五万字超详细解析!带着耐心点进来!
  • 一个系列搞定MyBatis:MyBatis配置动态SQL语句基础
  • 一个系列搞定MyBatis:MyBatis快速上手增删改查
  • 一个系列搞定MyBatis:Mybatis多表查询
  • PropertyPlaceholderConfigurer 用法超详细解析!
  • JavaFX之WebView超详细解析!
  • javafx之webEngine超详细解析
  • mybatis-plus进阶教程!超详细使用方法解析!
  • mybatis-plus入门教程!看完必懂!超详细解析!
  • Mybatis-Plus中的代码生成器AutoGenerator超详细解析!完整配置!
  • Mybatis plus关闭驼峰命名,防止出现查询为Null!四种方法超详细解析!
  • Spring体系结构超详细解析!
  • 自然语言处理系列之: NLP基础
  • 时间复杂度分析经典问题——最大子序列和
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Android交互
  • centos安装java运行环境jdk+tomcat
  • ES6系统学习----从Apollo Client看解构赋值
  • github从入门到放弃(1)
  • Hibernate最全面试题
  • HTTP--网络协议分层,http历史(二)
  • linux安装openssl、swoole等扩展的具体步骤
  • Python 基础起步 (十) 什么叫函数?
  • Spring Cloud Feign的两种使用姿势
  • 测试开发系类之接口自动化测试
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 二维平面内的碰撞检测【一】
  • 工作中总结前端开发流程--vue项目
  • 京东美团研发面经
  • 聚簇索引和非聚簇索引
  • 判断客户端类型,Android,iOS,PC
  • 前端js -- this指向总结。
  • 浅谈web中前端模板引擎的使用
  • 实现简单的正则表达式引擎
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 突破自己的技术思维
  • 用Visual Studio开发以太坊智能合约
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • #define、const、typedef的差别
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (10)STL算法之搜索(二) 二分查找
  • (2022 CVPR) Unbiased Teacher v2
  • (分布式缓存)Redis分片集群
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (一)VirtualBox安装增强功能
  • (转)jdk与jre的区别
  • ***检测工具之RKHunter AIDE
  • *上位机的定义
  • . NET自动找可写目录
  • .naturalWidth 和naturalHeight属性,
  • .net core使用ef 6