模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象的方法迫使子类实现剩余的逻辑。不同的子类可以有不同的实现,这是模板方法的用意。而我认为其精髓在于在抽象类中定义的模板方法,此方法为抽象类中其他方法的一个有序的汇总。
模板方法模式的静态结构如下图所示:
这里涉及到2个角色:
抽象模板角色有如下责任:
- 定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是顶级逻辑的组成部分。
- 定义并实现了一个模板方法。它给出了一个顶级逻辑的骨架,而逻辑的部分组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体的方法。
具体模板角色有如下责任:
- 实现了父类定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。
- 每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法的不同实现,从而使得顶级逻辑的实现各不相同。
示意性源码如下:
首先抽象模板角色提供了一个具体的方法(也即所谓的模板方法) TemplateMethod(),此方法按一定顺序调用了其他方法(包括抽象方法和具体方法)
public abstract class AbstractClass {
/**
* 模板方法
*/
public void TemplateMethod(){
// 调用基本方法(由子类实现)
doOperation1();
// 调用基本方法(已实现)
doOperation3();
// 调用基本方法(由子类实现)
doOperation2();
}
/**
* 基本方法声明,由子类实现
*/
protected abstract void doOperation1();
/**
* 基本方法,已实现
*/
private void doOperation3(){
System.out.println("doOperation3()");
// do somethings
}
/**
* 基本方法声明,由子类实现
*/
protected abstract void doOperation2();
}
显然doOperation1(),doOperation2()等基本方法是模板方法的组成部分,抽象模板自己并不给出这些抽象方法的实现,而是把这些方法交给子类去实现。
public class ConcreteClass extends AbstractClass {
/**
* 基本方法的实现
*/
@Override
protected void doOperation1() {
// do somethings
System.out.println("doOperation1()");
}
/**
* 基本方法的实现
*/
@Override
protected void doOperation2() {
// do somethings
System.out.println("doOperation2()");
}
}
这个具体模板角色实现了父类所声明的抽象方法doOperation1(),doOperation2(),而这2个方法的代表的就是强制子类实现的剩余逻辑。
模板方法模式的应用
HttpServlet技术是建立在模板方法模式的基础之上的。HttpServlet类提供了一个service()方法。这个方法调用了7个do方法中的一个或几个,完成对客户端调用的处理。这些do方法则要求由具体的子类来实现。在这里service()方法便是模板方法,7个do方法便是基本方法。因HttpServlet对7个do方法都提供了默认实现,所以子类只是选择性的覆盖这些do方法而已,最常见的是覆盖doGet(),doPost()方法,这样每个子类就可以实现自己的业务逻辑。
参考书籍:Java与模式
- 大小: 24.1 KB
分享到:
相关推荐
在"template-method-demo"这个示例中,我们可以预见到它将展示如何在Java中应用模板方法模式。这个压缩包可能包含以下内容: 1. 一个抽象类(例如:`AbstractClass`),它定义了模板方法。在这个类中,可能会有一个...
模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...
3. **模板方法(Template Method)**:这是在抽象类中定义的方法,它调用了一个或多个钩子方法(即抽象方法或可选的具体方法)。模板方法执行整体算法的顺序,并且通常在最后调用钩子方法以完成算法的定制部分。 4....
模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 具体来说,模板方法模式的关键特点包括: 抽象类:在抽象类中定义一个模板方法,该方法给出了算法的框架。 具体...
### Java设计模式26模板方法模式 #### 模式动机 模板方法模式是基于继承机制的一种代码复用技术,它允许子类通过扩展的方式重写父类中的抽象方法,以此来实现不同子类间的差异性行为。在软件工程中,我们经常遇到...
行为型模式如观察者(Observer)、模板方法(Template Method)和策略(Strategy)等,关注对象之间的交互和责任分配。 在Java与模式的光盘源码中,你可以找到这些模式的实际应用示例,这对于学习和掌握设计模式至...
在Java中,模板方法模式通常通过抽象类来实现。抽象类定义了基本操作,这些操作由具体子类实现。模板方法通常是一个抽象方法,它调用这些基本操作,形成一个完整的算法流程。这种方式有助于减少代码重复,保持代码的...
例如,Java的JDBC API就使用了模板方法模式,提供了数据库操作的基本流程,而用户只需关注具体的SQL执行细节。 ### 实现示例 ```java abstract class Coffee { // 模板方法 public final void makeCoffee() { ...
### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...
在文件名“templatemethod”中,可能是提供了一些关于模板方法模式的具体示例代码或案例分析。通过查看这些文件,我们可以更深入地了解如何在实践中应用模板方法模式以及如何结合代码重构优化代码结构。
在实际开发中,模板方法模式常用于框架和库的设计,比如Spring框架中的AOP(面向切面编程)就运用了模板方法模式,以及各种编程语言的标准库,如Java的JDBC中的Statement和PreparedStatement类,它们提供了执行SQL...
模板方法模式(Template Pattern)是设计模式中行为型模式的一种,它定义了操作中的算法骨架,而将一些步骤延迟到子类中。这种模式允许子类重新定义或改变某些基本操作,但整体结构和顺序保持不变。在Java编程中,...
模板方法模式是一种行为设计模式,它允许在定义行为框架的同时,延迟部分具体步骤到子类中实现。这种模式主要用于在父类中定义算法的骨架,而将一些步骤的实现细节留给子类去完成,从而使得不同的子类可以重用相同的...
如命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式(State)、策略模式(Strategy)、模板方法模式(Template Method)、访问...
模版方法模式(Template Method) 准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现...
下面是一个简单的Java模板方法模式示例,以饮料制作过程为例: ```java public abstract class Drink { public final void prepare() { boilWater(); brew(); pourInCup(); if (isAddCondiments()) { ...
模板方法模式 (Template Method Pattern) 模板方法模式是一种行为型模式,它定义了一个操作中的算法骨架,将一些步骤延迟到子类中。模板方法让子类可以重新定义算法的某些步骤,而不改变算法的整体结构。这种模式...
3. **行为型模式**:例如策略(Strategy)、模板方法(Template Method)、观察者(Observer)、命令(Command)、迭代器(Iterator)、访问者(Visitor)、备忘录(Memento)、状态(State)、职责链(Chain of ...
观察者模式允许一个对象的状态改变时通知其他对象,策略模式让算法可以独立于使用它的客户端而变化,模板方法模式则定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。 书中可能还会涉及一些与Java特性紧密...
3. **行为型模式**:包括策略(Strategy)、模板方法(Template Method)、观察者(Observer)、迭代器(Iterator)、访问者(Visitor)、责任链(Chain of Responsibility)、命令(Command)、备忘录(Memento)、...