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

定义一个操作中的算法的框架,而将一些步骤延续到子类中。使得子类可以不改变一个算法的结构即可重定义该算法中的某些特定步骤。

首先创建一个去吃饭的场景类

public abstract class EatFood{//先去饭店protected abstract void toRestaurant();//吃饭protected abstract void eat();//打包protected abstract void bale();//付钱protected abstract void pay();//去吃饭public final void toEat(){this.toRestaurant();this.eat();if (!this.isRemaining()){this.bale();}this.pay();}//默认吃完了protected boolean isRemaining(){return true;}
}

吃饭分两种,在附近吃,没吃完要打包,在远处吃,吃不完就算了,扔了吧

public class FarEat extends EatFood{@Overrideprotected void toRestaurant() {System.out.println("去远处的餐厅");}@Overrideprotected void eat() {System.out.println("吃饭");}@Overrideprotected void bale() {System.out.println("没吃完,打包");}@Overrideprotected void pay() {System.out.println("付钱");}}public class NearbyEat extends EatFood{private Boolean isOk = true;@Overrideprotected void toRestaurant() {System.out.println("去附近的餐厅");}@Overrideprotected void eat() {System.out.println("吃饭");}@Overrideprotected void bale() {System.out.println("没吃完,打包");}@Overrideprotected void pay() {System.out.println("付钱");}@Overrideprotected boolean isRemaining(){return this.isOk;}public void setIsOk(Boolean b){this.isOk = b;}
}

当然了,附近你吃完了也是不用打包的,好了,我们去吃饭了

public class Test {public static void main(String[] args) {FarEat farEat = new FarEat();farEat.toEat();NearbyEat nearbyEat = new NearbyEat();nearbyEat.setIsOk(false);nearbyEat.toEat();}
}

运行如下:

去远处的餐厅
吃饭
付钱
去附近的餐厅
吃饭
没吃完,打包
付钱

模板方法定义是将公用的方法提升到父类。当然了,我们上面了实例中使用了钩子方法,实现了在子类中控制父类方法。在实际应用中比较广泛

模板方式是一个相对简单的设计模式,优点有三点:

1.封装不变,扩展可变

2.提取公共部分,便于维护

3.行为由父类控制,子类实现

使用场景是在子类有多个公用方法时候,或者换一种说法就是当你的一个代码有重复的时候可以考虑使用模板方法模式。

设计模式:模板方法模式相关推荐

  1. 在一个程序设计里,不同的功能窗口有着相似的功能实现方式,可采用设计模式---模板方法模式

        前段时间学习了一些设计模式,最近在做项目的过程中恰巧用到了其中的一个--模板方法模式.这个模式在程序设计过程中可是为小编省去了不少的代码量呢.具体是怎样应用的呢?接下来小编为您分享. 前面博文 ...

  2. 『设计模式』瑞幸咖啡还是星巴克,一杯下午茶让我明白 设计模式--模板方法模式(Template Method Pattern)

    23种设计模式+额外常用设计模式汇总 (持续更新) 简介 Define the skeleton of an algorithm in an operation,deferring some step ...

  3. 『设计模式』设计模式--模板方法模式

    23种设计模式+额外常用设计模式汇总 (持续更新) 简介 Define the skeleton of an algorithm in an operation,deferring some step ...

  4. 行为型设计模式---模板方法模式

    设计模式 序号 内容 链接地址 1 设计模式七大原则 https://blog.csdn.net/qq_39668819/article/details/115390615 2 创建型设计模式–工厂模 ...

  5. Java设计模式-模板方法模式详解

    Java设计模式-模板方法模式 文章目录 Java设计模式-模板方法模式 0.前言 1.模板方法原理 2.模板方法模式中的角色 3.模板方法模式的UML类图 4.代码实现 5.编码测试 6.模板模式中 ...

  6. Java设计模式 - 模板方法模式

    Java设计模式 - 模板方法模式 定义一个算法的骨架,并将一些步骤通过子类表达. UML图示 要点 1. 定义一个算法的骨架 - 建立一个抽象类 2. 将一些步骤通过子类表达 - 子类继承抽象类 赋 ...

  7. linkin大话设计模式--模板方法模式

    linkin大话设计模式--模板方法模式 准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不 ...

  8. JAVA 设计模式 模板方法模式

    定义 模板方法模式 (Template Method) 定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成. 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模 ...

  9. 模板设计模式_设计模式-模板方法模式

    一.模板方法模式的定义 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计 ...

  10. 大话设计模式—模板方法模式

    在模板方法模式(TemplateMethod Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计模式属于 ...

最新文章

  1. linux延时与定时计算
  2. Swift Package Manager 库制作
  3. matlab格拉姆施密特,改进的格拉姆-施密特正交化(modified Gram-Schmidt Process)
  4. BZOJ 4044 Luogu P4762 [CERC2014]Virus Synthesis (回文自动机、DP)
  5. 一文掌握二代测序NGS
  6. win8.1 USB启动盘制作(不支持UEFI,不支持GPT分区)
  7. php 读取onedrive文件夹,oneindex
  8. OJ1045: 数值统计(c语言)
  9. ibm ilog mysql_开源纯C日志函数库iLOG3快速入门(八、如果你喜欢简单日志函数甚于日志函数库)...
  10. Java--文档注释
  11. 如何安装王码五笔字型输入法86版
  12. 高清电脑壁纸2k图片,4k批量免费下载,壁纸打包下载,美女壁纸
  13. 5W2H法分析用户流失内因
  14. 现货白银的最小交易单位
  15. 2022安好? 2023何如?
  16. cad计算机绘注意事项,CAD打印的基本操作和重要的注意事项
  17. i3 10100f和i5 9600kf 哪个好
  18. 无人驾驶车辆运动规划方法综述
  19. 一个追风筝的人,追寻着什么
  20. uCore OS(on RISC-V64)——LAB1:中断机制

热门文章

  1. 用Excel把一列数据转变成一行,并用逗号隔开
  2. IM即时通讯-N-如何保证消息的可靠性展示
  3. 详解ISA的HTTP过滤功能
  4. Majorization-Minimization (MM) 和 Successive Convex Approximation (SCA)
  5. 调用caffe2中pre-trained model(squeezenet)
  6. html hover效果下拉个框,CSS实现Hover下拉菜单的方法
  7. 活越度超过的QQ群正在扩招群员,200上限还有位置
  8. python之字典相关函数及注意事项
  9. 转发 -- C 语言声明指针的时候 int *p 到底是什么意思?
  10. 获得iphone手机动态ip地址