当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。
使用了继承,并肯定了这个继承的意义,就应该要成为子类的模板,所有重复的代码都应该要上升到父类去,而不是让每个子类都去重复。
所谓模板模式,就是在父类中定义算法的主要流程,而把一些个性化的可变部分步骤延迟到子类中去实现,父类始终控制着整个流程的主动权,子类只是辅助父类实现某些可定制的步骤。
模版方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。
HttpServlet中的doGet,doPost,doPut,doDelete等方法
spring中被大量使用,如:jdbcTemplate,hibernateTemplate,JndiTemplate以及一些包围的包装等都无疑使用了模板模式,但spring并不是单纯使用了模板方法,而是在此基础上做了创新,配合callback(回调)一起使用,用得极其灵活。
1.抽象模板:定义了一个或者多个抽象操作,以便让子类实现,为基本操作。
2.具体模板:实现了父类定义的一个或者多个抽象方法,每个抽象模板角色都有其具体模板角色与之对应。换言之,模板方法在抽象类里面定义了一个骨架流程,A,B,C,然后在具体模板方法(子类)里面实现A,B,C
模板方法中的方法可以分为:模板方法(TempleteMethod)和基本方法(primitive Method)。
1.模板方法:是指定义在抽象类的一个具体的方法,把基本操作方法组合在一起形成一个总算法或一个总行为,通常定义为final,它定义了整个算法的逻辑骨架。
2.基本方法:包括抽象方法,具体方法,钩子方法(do开头命名)。
a.抽象方法: 抽象模板中定义为抽象方法,由子类实现。
b.具体方法: 抽象模板中提供默认实现。
c.钩子方法:抽象模板中定义并提供默认实现(通常是空实现),在子类中覆盖或扩展。
模板方法模式中,抽象类的模板方法应该声明为final的,从而保证了子类的逻辑永远由父类所控制。
1.抽象模板角色:抽象类
2.具体模板角色:具体实现类
要点:
1. 模板方法中的非final方法(默认实现或不做事的方法)称为“钩子”。
2. 钩子可以简化子类的实现。
3. 钩子可以让子类能够有机会对模板方法中某些即将发生的(或刚刚发生的)步骤做出反应。
4. primitiveMethod的命名最好加上do前缀。
5. 工厂模式为模板方法模式的特例。
6. 除了可以灵活应对子步骤的变化外,“不用调用我,让我来调用你”的反向控制结构是Template Method的典型应用。
7. 模板方法是代码复用的一项基本的技术,在类库中尤其重要。,它遵循“抽象类应当拥有尽可能多的行为,应当拥有尽可能少的数据”的重构原则。
适用性:
1. 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
2. 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。这是Opdyke和Johnson所描述过的“重分解以一般化”的一个很好的例子。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
3. 控制子类扩展。模板方法只在特定点调用Hook操作,这样就只允许在这些点进行扩展。
实例:
1.抽象模板类
public abstract class AbstractTemplateMethod { public final void process() { this.step1(); this.step2(); this.step3(); this.step4(); this.step5(); } public abstract void step1(); public abstract void step2(); public abstract void step3(); public final void step4() { System.out.println("step4 ..."); } private void step5() { System.out.println("step5 ..."); } }
2.具体实现类
public class ConcretenessMethod extends AbstractTemplateMethod { @Override public void step1() { System.out.println("step1 ..."); } @Override public void step2() { System.out.println("step2 ..."); } @Override public void step3() { System.out.println("step3 ..."); } }
3.调用测试
public class Test { public static void main(String[] args) { AbstractTemplateMethod atm = new ConcretenessMethod(); atm.process(); } }
相关推荐
在软件开发领域,设计模式是一种经过验证的、通用的解决方案,用于解决常见的设计问题。C++作为一门强大的面向对象编程语言,广泛应用于各种复杂系统,因此掌握设计模式对于C++开发者来说至关重要。"23种设计模式...
模板方法模式是面向对象设计模式中的行为模式之一,它在Java等面向对象编程语言中有着广泛的应用。模板方法模式的主要思想是在一个抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现。这样,子类可以重写...
模板方法模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在C++这样的面向对象编程语言中。这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的...
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式...这种类型的设计模式属于行为型模式。 模板方法模式 java demo
模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...
模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。 ### 模板方法模式的关键角色 1. **...
模板方法模式是设计模式中行为模式的一种,它在软件工程中扮演着重要的角色,尤其是在创建算法框架时。这种模式允许我们在抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现,使得子类可以不改变算法的结构...
### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...
STM32F407是意法半导体(STMicroelectronics)推出的一款基于ARM Cortex-M4内核的微控制器,广泛应用于各种嵌入式系统设计。它具有高性能、低功耗的特点,内置浮点运算单元(FPU),适用于复杂的数学运算。在进行STM...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
### 深入浅出设计模式之模板方法模式 #### 一、模板方法模式概述 设计模式是软件工程中一种非常重要的技术手段,它能够帮助我们解决常见的编程问题,并提高代码的可重用性、可扩展性和可维护性。模板方法模式是一...
**Struts** 是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,用于构建可维护性高、结构清晰的Web应用。它主要负责处理HTTP请求,管理视图和模型之间的交互,通过Action和ActionForm组件来...
### C++设计模式课件3_Template Method_模板方法 #### 模板方法设计模式解析 模板方法模式(Template Method Pattern)是一种行为型设计模式,它允许我们定义算法的骨架,并将部分步骤推迟到子类中实现。这种模式...
在Java编程中,模板方法模式是一种结构型设计模式,它定义了算法的骨架,允许子类在不改变算法结构的情况下重定义算法的某些步骤。 在Java的持久层开发中, Dao(Data Access Object)层是负责数据库交互的重要部分...
综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/...
(3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象...
模板方法模式是一种行为设计模式,它允许在定义行为框架的同时,延迟部分具体步骤到子类中实现。这种模式主要用于在父类中定义算法的骨架,而将一些步骤的实现细节留给子类去完成,从而使得不同的子类可以重用相同的...
模板方法模式(Template Method)是设计模式中行为型模式的一种,它定义了操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这个模式在C++编程中有着...