欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


欢迎跳转到本文的原文链接:https://honeypps.com/design_pattern/template-method/

模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。一次性的实现一个算法的不变部分,并将可变的行为留给子类来实现。

 模板方法的关键是:子类可以置换掉父类的可变部分,但是子类却不可以改变模板方法所代表的顶级逻辑。
 模板方法模式中的方法可以分为两大类:模板方法基本方法

1 模板方法
 一个模板方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。
 一个抽象类可以有任意多个模板方法,而不限于一个。每一个模板方法都可以调用任意多个具体方法。

2 基本方法
 基本方法又可以分为三种:抽象方法(Abstract Method)、具体方法(Concrete Method)和钩子方法(Hook Method)。
 抽象方法:一个抽象方法由抽象类声明,由具体子类实现。
 具体方法:一个具体方法由抽象类声明并实现,而子类并不实现或置换。
 钩子方法:一个钩子方法由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。这种空的钩子方法叫做“Do Nothing Hook"。钩子方法的名字应当以do开始,这是熟悉设计模式的Java开发人员的标准做法。譬如HttpServlet类中,也遵从这一命名规则:doGet, doPost等。 在HttpServlet中模板方法由service()方法担任,基本方法由doPost(),doGet()等方法担任。

案例
1 AbstractClass

public abstract class AbstractTemplate
{public void templateMethod(){abstractMethod();doHookMethod();concreteMethod();}protected abstract void abstractMethod();protected void doHookMethod(){}protected final void concreteMethod(){System.out.println("invoke concreteMethod");};
}

2 ConcreteClass

public class ConcreteTemplate extends AbstractTemplate
{@Overrideprotected void abstractMethod(){System.out.println("ConcreteTemplate-abstractMethod");}@Overridepublic void doHookMethod(){System.out.println("ConcreteTemplate-doHookMethod");}
}

参考资料

  1. 23种设计模式
  2. 《JAVA与模式》之模板方法模式

欢迎跳转到本文的原文链接:https://honeypps.com/design_pattern/template-method/

欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


设计模式:模板方法模式(Template Method)相关推荐

  1. 趣谈设计模式 | 模板方法模式(Template Method):封装不变部分,扩展可变部分

    文章目录 案例:房屋建造 模板方法模式 模板方法模式与策略模式 总结 完整代码与文档 这个设计模式过于简单,所以不是很好举例- 案例:房屋建造 假设我们是建筑公司中的规划者,负责设定建筑方案,在初期我 ...

  2. 模板方法模式 Template method 行为型 设计模式(二十六)

    模板方法模式 Template method 上图为网上百度的一份简历模板截图 相信大家都有求职的经历,那么必然需要简历,写简历的时候,很可能你会网上检索一份简历模板,使用此模板的格式,然后替换为你的 ...

  3. JAVA设计模式(14) —行为型模板方法模式(Template Method)

    1 定义: 模板方法模式(Template Method) Define the skeleton of an algorithm in anoperation, deferring some ste ...

  4. java 模板方法_设计模式(java实现)_模板方法模式(Template method)

    设计模式(java实现)_模板方法模式(Template method) 模板方法模式是编程中经常用到到的模式.它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现.这样,新的子类可以在不改变一个 ...

  5. 设计模式之模板方法模式(Template Method Pattern)

    模式的定义与特点 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤.它 ...

  6. C++设计模式——模板方法(Template Method)

    模板方法(template method)设计模式用于定义一个包含许多步骤的算法框架,允许子类重写(覆盖)算法的某一个步骤而不改变算法整体的流程和框架. 模板方法提供的流程是骨架,子类无须覆盖模板方法 ...

  7. 设计模式之模板方法模式(Template Method)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  8. 设计模式之行为模式中的模板方法模式(template method)

    设计模式之行为模式中的模板方法模式(template method) 声明 一.行为模式 二.模板方法模式 三.实例 概况描述 代码 运行结果 优点 类似的模式 优秀文章 声明 本人写此文章只是为了梳 ...

  9. [设计模式-行为型]模板方法模式(Template Method)

    一句话 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中. 概括 解析 看过<如何说服女生上床>这部经典文章吗?女生从认识到上床的不变的步骤分为巧遇.打破僵局.展开追求.接吻.前戏.动 ...

  10. 【设计模式】行为型02模板方法模式(Template Method Patten)

    五一长假,没有出去,不喜欢嘈杂的人群,玩了会游戏发泄了下憋在心底的戾气,手旁大马克杯里是母亲泡的绿茶.点开自己的播放列表,耳机里传来的是理查德克莱德曼的致爱丽丝.自己是个凡人,卑微渺小的活着.不说废话 ...

最新文章

  1. java 2分钟_java – 为什么我的应用程序启动时间超过2分钟?
  2. 最强干货实践教程 | YOLOv5在建筑工地中安全帽佩戴检测的应用
  3. 在Mac OS X中配置Apache + PHP + MySQL
  4. 一年拿下软考中高级+PMP是一种怎样的体验?
  5. java基础知识 多线程
  6. codeforces 758 A
  7. iphone7p配置参数详情_华为mate40标准版参数配置-参数详情
  8. 5G 重新定义生老病死!
  9. You have new mail in /var/spool/mail/root 解决方法
  10. “语音识别”服务人类
  11. H5 表格标签基本使用
  12. 子窗体(初学者进来学习吧)
  13. python 编程自学手册 pdf-跪求《python学习手册》(第五版)pdf中文版!/
  14. c语言行列坐标是先行后j,C语言课后习题参考答案
  15. synaptics触摸板_使用Dell Synaptics触摸板修复Firefox滚动问题
  16. 苹果上网本报价_比iPhone还便宜,这是你能买到最香的苹果笔记本!?
  17. 百度图像识别java使用笔记
  18. Ubuntu 编译最新LLVM套件:LLVM 16.0
  19. 过了面试入职被排挤,离职是最坏的做法!
  20. Android AOA协议Android端 流程总结

热门文章

  1. jsp页面调用ajax,在jsp中使用jquery的ajax
  2. opencv笔记(3):图像镜像
  3. 人工智能热门图书(深度学习、TensorFlow)免费送!
  4. 《Python数据挖掘:概念、方法与实践》——1.5节小结
  5. == 捕获对象时的模式切换 ==
  6. mybatis sql中有中文处理
  7. Windows Phone 7项目实战之记事本(二)
  8. 中石油训练赛 - sciorz画画(区间dp)
  9. HDU - 3613 Best Reward(字符串哈希)
  10. 2019ICPC(南京) - Holy Grail(最短路)