模板方法模式

Template Method Pattern

定义:

Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.

定义一个操作中的算法框架,将一些步骤延迟到子类中。让子类可以不修改算法的结构就可以重定义特定步骤。

java中就是利用继承抽象模板类来实现。抽象类决定结构,实现类来实现方法。

抽象类AbstractClass的方法分为两种:

  • 基本方法:

    由子类实现的方法,在模板方法中被调用

  • 模板方法:

    原文:可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调用,完成固定的逻辑。

    在模板里的具体方法,这个具体方法一般写的是对基本方法的调用。

    模板方法里最好加上final修饰,不允许被重写

通用代码:

//抽象模板类
public abstract class AbstractClass {//基本方法protected abstract void doSomething();protected abstract void doAnything();//模板方法public final void templateMethod() {//调用基本方法,实现相关逻辑this.doSomething();this.doAnything();}
}
//具体模板类
public class ConcreteClass1 extends AbstractClass {protected void doSomething() {...}protected void doAnything() {...}
}
public class ConcreteClass2 extends AbstractClass {protected void doSomething() {...}protected void doAnything() {...}
}
//使用场景:
public static void mian(Sting[] args) {AbstractClass class1 = new ConcreteClass1();AbstractClass class2 = new ConcreteClass2();class1.templateMethond();class2.templateMethond();
}

注意 : 抽象模板中的基本方法尽量设计为protected类型,符合迪米特法则,不需要暴露 的属性或方法尽量不要设置为protected类型。

优点:

  • 封装不变的部分,拓展可变的部分
  • 提取公共部分,便于维护
  • 由父类提供控制,子类来实现

缺点:

  • 因为抽象类的模板方法是调用基本方法,而基本方法是由子类决定的。所以子类会影响父类。带来一定的阅读难度

应用场景:

  • 多个子类有公有的方法,基本逻辑相同

  • 重要、复杂的算法,把核心的算法设计为模板方法,相关的周边细节设计为子基本方法由子类实现

  • 在重构时,把相同的代码抽取到父类,然后通过“钩子函数”约束其行为(由子类的一个方法返回值决定公共部分的执行结果)

【设计模式之禅】模板方法模式相关推荐

  1. 设计模式之禅——模板方法模式(Template Method Pattern)

    1.基本概念 Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Templa ...

  2. 读设计模式之禅--模板方法模式

    定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 /*** @auther hyh* 生产一个芭比娃娃机器人* @create ...

  3. 咖啡泡JAVA_java《Head First 设计模式》之模板方法模式——冲泡咖啡和茶

    <Head First 设计模式>之模板方法模式--冲泡咖啡和茶 模板方法模式(Template) 在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变 ...

  4. 小话设计模式五:模板方法模式

    模板方法模式定义: 定义一个操作中的算法骨架,而将一些实现步骤延迟到子类当中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 模板方法解析: 模板方法模式是比较简单的一种设计 ...

  5. 设计模式(十):模板方法模式

    目录 1.整体框架 2.介绍 2.1.定义 2.2.作用 2.3.解决的问题 3.认识模版方法模式 3.1.变与不变 3.2.好莱坞法则 3.3.对设计原则的体现 4.模式原理 4.1.UML类图 & ...

  6. Java设计模式系列之——模板方法模式

    大事件 关注篮球或者喜欢逛社交网站的朋友们可能都知道,2019年10月5日,NBA休斯顿火箭队总经理莫雷在推特上发布了一张无知的涉港图片,引发全体中国人民的强烈抗议和不满,一时间舆论哗然,此后,NBA ...

  7. Java设计模式9,模板方法模式

    目录 一.模板方法模式 二.模板方法模式的结构 三.模板方法模式的优缺点 1.优点 2.缺点 四.模板方法模式的使用场景 五.通过模板方法模式实现 抽象类WorkDay 1.顶级抽象类 2.项目经理的 ...

  8. 23种设计模式之:模板方法模式

    转载地址:https://blog.csdn.net/zhengzhb/article/details/7405608 整理的设计模式实例:https://github.com/jinchuanchu ...

  9. 设计模式系列之 模板方法模式

    定义 在模板方法中定义一个算法的骨架,而将部分步骤延迟到子类中,使子类在不改变算法结构的情况下,重新定义算法中的部分步骤. 理解该模式的关键就在"模板"二字.什么是模板?模板就是预 ...

  10. 设计模式读书笔记-----模板方法模式

    首先我们先来看两个例子:冲咖啡和泡茶.冲咖啡和泡茶的基本流程如下: 所以用代码来创建如下: 咖啡:Caffee.java public class Coffee {void prepareRecipe ...

最新文章

  1. NLP千亿预训练模型的“第四范式”之Prompt Learning介绍分享
  2. 获取线程结束代码(Exit Code)
  3. python调用C++之pybind11入门
  4. asp.net MVC 路由机制 Route
  5. 【工具】WPS安卓电脑无广告版
  6. 双指针算法(三):力扣【167.两数之和 | 经典例题
  7. [Unity3d]旋转拖动物体
  8. vue 断开正在发送的请求_vue 发送请求频繁时取消上一次请求
  9. 21-win10下ElasticSearch.6.1.0安装SQL插件
  10. html标签slot,插槽solt和slot-scope
  11. 面试时如何回答购物车测试步骤?
  12. java中 关于静态方法的定义_为什么我们不能在Java接口中定义静态方法?
  13. 《AI算法工程师手册》读书笔记(1)
  14. VMware ESXi下虚拟机的嗅探设置
  15. CD卡命令和响应的详解
  16. android excel在线制作教程,Excel手机表格制作软件
  17. 审计工作存在的难点和问题_基层审计工作中存在的问题及建议
  18. 18-Sqoop、DataX和Azkaban的介绍
  19. idea任务栏图标变白色,桌面快捷方式变白色
  20. 苹果申请声波屏下指纹识别专利 精度足以取代Touch ID

热门文章

  1. 计算机类SCI前三区期刊
  2. linux rm无法删除权限不够,linux下的文件用root用户rm -rf命令无法删除解决方案
  3. iOS 启动页面设置和 AppIcon设置
  4. 关于我的家乡html网页设计完整版,10个以家乡为主题的网页设计与实现
  5. Gartner公司分析的历年智能手机操作系统市场占有率
  6. STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭
  7. w讠ndows Boot Manager,开机出现boot manager该怎么办 开机出现windows boot manager怎么解决 - 云骑士一键重装系统...
  8. 基于MCU_USB的虚拟串口助手实现
  9. 如何将手机PDF转成JPG图片?分享两个技巧
  10. 2022年全球与中国PERC电池市场现状及未来发展趋势