定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。
通俗点的理解就是 :完成一件事情,有固定的数个步骤,但是每个步骤根据对象的不同,而实现细节不同;就可以在父类中定义一个完成该事情的总方法,按照完成事件需要的步骤去调用其每个步骤的实现方法。每个步骤的具体实现,由子类完成。
比如我们做菜可以分为三个步骤 (1)备料 (2)具体做菜 (3)盛菜端给客人享用,这三部就是算法的骨架 ;然而做不同菜需要的料,做的方法,以及如何盛装给客人享用都是不同的这个就是不同的实现细节。
下来我们就代码实现如下
a. 先来写一个抽象的做菜父类:
public abstract class DodishTemplate { /** * 具体的整个过程 */ protected void dodish(){ this.preparation(); this.doing(); this.carriedDishes(); } /** * 备料 */ public abstract void preparation(); /** * 做菜 */ public abstract void doing(); /** * 上菜 */ public abstract void carriedDishes (); }
b. 下来做两个番茄炒蛋(EggsWithTomato)和红烧肉(Bouilli)实现父类中的抽象方法
/** * 西红柿炒蛋 * @author aries */ public class EggsWithTomato extends DodishTemplate{ @Override public void preparation() { System.out.println("洗并切西红柿,打鸡蛋。"); } @Override public void doing() { System.out.println("鸡蛋倒入锅里,然后倒入西红柿一起炒。"); } @Override public void carriedDishes() { System.out.println("将炒好的西红寺鸡蛋装入碟子里,端给客人吃。"); } }
/** * 红烧肉 * @author aries * */ public class Bouilli extends DodishTemplate{ @Override public void preparation() { System.out.println("切猪肉和土豆。"); } @Override public void doing() { System.out.println("将切好的猪肉倒入锅中炒一会然后倒入土豆连炒带炖。"); } @Override public void carriedDishes() { System.out.println("将做好的红烧肉盛进碗里端给客人吃。"); } }
测试类:
public class App { public static void main(String[] args) { DodishTemplate eggsWithTomato = new EggsWithTomato(); eggsWithTomato.dodish(); System.out.println("-----------------------------"); DodishTemplate bouilli = new Bouilli(); bouilli.dodish(); } }
模板模式的优点:
(1)具体细节步骤实现定义在子类中,子类定义详细处理算法是不会改变算法整体结构。
(2)代码复用的基本技术,在数据库设计中尤为重要。
(3)存在一种反向的控制结构,通过一个父类调用其子类的操作,通过子类对父类进行扩展增加新的行为,符合“开闭原则”。
不足:
每个不同的实现都需要定义一个子类,会导致类的个数增加,系统更加庞大。
相关推荐
### 设计模式精解——GoF23中设计模式解析 #### 重要性与起源 设计模式是软件工程领域的一项重要研究,它提供了一系列解决常见软件设计问题的模板。GoF23指的是由Erich Gamma、Richard Helm、Ralph Johnson和John ...
C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...
《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。设计模式是软件工程领域中经过实践验证的、解决常见问题的有效方案,它们代表了在特定上下文中,针对特定问题的最优...
本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...
5.10 TEMPLATE METHOD(模板方法) —类行为型模式 214 5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 ...
### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...
- 模板方法模式(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 - 访问者模式(Visitor):表示一个作用于某对象...
### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...
传统的`HttpResponse`方法将数据直接与视图混合,不符合Django的模型-视图-控制器(MVC)设计模式。为了实现模板应用,我们使用了`render`函数。`render`接收请求对象`request`、要渲染的模板名称`'HelloWorld....
设计模式——模板方法模式模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤使用场景:当不变和可...
这份名为“设计模式PPT——25种设计模式详解”的资料,显然是一个深入探讨设计模式的教程,它通过PDF格式对25种主要的设计模式进行了详尽的阐述。 首先,我们要理解设计模式的基本概念。设计模式不是代码,而是一种...
### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 0. 引言 设计模式是软件工程领域的一个重要概念,它为解决特定问题提供了一套标准的解决方案。《设计模式精解——GoF 23种设计模式解析及C++实现源码...
《研磨设计模式》实战是IT领域中关于软件设计的一份重要资料,它主要探讨了设计模式在实际项目中的应用。设计模式是软件工程中经过长期实践总结出的通用问题解决方案,是解决常见设计问题的经验总结。这份PPT可能是...
本文实例讲述了Python设计模式之模板方法模式。分享给大家供大家参考,具体如下: ...设计模式——模板方法模式 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子
《HeadFirst设计模式》是一本深受开发者欢迎的书籍,它以独特、易理解的方式介绍了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的最佳实践,它们为软件设计提供了可复用的...
《系统架构设计师 设计模式》是一本针对软考系统架构设计师考试的重要参考资料,它深入探讨了软件架构设计中的核心概念——设计模式。设计模式是软件工程中经过实践验证的、解决常见问题的有效方法,是软件开发人员...
模板方法模式(Template Method Pattern)是一种行为设计模式,它允许在父类中定义算法的框架,然后由子类提供具体的实现。这种模式的核心是“模板方法”,它在父类中定义了一个操作的步骤顺序,并将某些步骤声明为...
设计模式C++版文档主要聚焦于面向对象设计与分析的核心——设计模式,并以C++语言实现为示范。这份文档详尽阐述了23种GoF(Gang of Four)设计模式,并结合具体的C++源码示例,旨在帮助读者深入理解并掌握这些设计...