`

5、模板方法模式

阅读更多

一、引子 

 

  • 这是一个很简单的模式,却被非常广泛的使用。之所以简单是因为在这个模式中仅仅使用到了继承关系。
  • 继承关系由于自身的缺陷,被专家们扣上了“罪恶”的帽子。
  • “使用委派关系代替继承关系”,“尽量使用接口实现而不是抽象类继承”等等专家警告,让我们这些菜鸟对继承“另眼相看”。
  • 其实,继承还是有很多自身的优点所在。只是被大家滥用的似乎缺点更加明显了。
  • 合理的利用继承关系,还是能对你的系统设计起到很好的作用的。
  • 而模板方法模式就是其中的一个使用范例。

二、定义

 

  • GOF给模板方法(Template Method)模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
  • 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
  • 这里的算法的结构,可以理解为你根据需求设计出来的业务流程。
  • 特定的步骤就是指那些可能在内容上存在变数的环节。
  • 可以看出来,模板方法模式也是为了巧妙解决变化对系统带来的影响而设计的。
  • 使用模板方法使系统扩展性增强,最小化了变化对系统的影响。这一点,在下面的举例中可以很明显的看出来。

三、结构

 

  • AbstractClass(抽象类):定义了一到多个的抽象方法,以供具体的子类来实现它们;
  • 而且还要实现一个模板方法,来定义一个算法的骨架。
  • 该模板方法不仅调用前面的抽象方法,也可以调用其他的操作,只要能完成自身的使命。
  • ConcreteClass(具体类):实现父类中的抽象方法以完成算法中与特定子类相关的步骤

四、模板方法适用于以下情况

 

  • 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现
  • 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。其实这可以说是一种好的编码习惯了
  • 控制子类扩展。模板方法只在特定点调用操作,这样就只允许在这些点进行扩展。
  • 如果你不愿子类来修改你的模板方法定义的框架,你可以采用两种方式来做:
  • 一是在API中不体现出你的模板方法;
  • 二是将你的模板方法置为final就可以了
五、好处
  • 使用模板方法模式可以将代码的公共行为提取出来,达到复用的目的。
  • 而且,在模板方法模式中,是由父类的模板方法来控制子类中的具体实现。
  • 这样你在实现子类的时候,根本不需要对业务流程有太多的了解。 

六、示例

 

public abstract class TemplateDemo
{
	public void runBare() throws Throwable {
	 setUp();
	 try {
	  runTest();
	 }
	 finally {
	  tearDown();
	 }
	}
	void setUp() throws Exception {}
	void tearDown() throws Exception {}
	abstract void runTest();//需要子类实现的特定步骤
}

 

  • 大小: 76 KB
分享到:
评论

相关推荐

    策略模式结合模板方法模式

    图 5 策略模式结合模板方法模式的结构示意图 在这个结构中,策略模式是主要的结构,模板方法模式是局部实现的方式。这样可以使得策略模式更加灵活和可扩展,并且可以更好地解决一些共性问题。 例如,在记录日志的...

    模板方法模式

    模板方法模式是一种设计模式,属于行为模式类别,它在面向对象设计中扮演着重要的角色。该模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的...

    Java设计模式之模板方法模式.rar

    模板方法模式是面向对象设计模式中的行为模式之一,它在Java编程中有着广泛的应用。这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定...

    第六课 模板方法模式1

    模板方法模式是一种设计模式,它在面向对象编程中扮演着重要的角色。该模式的主要目的是将不变的行为(或步骤)封装到基类中,而可变的行为留给子类去实现。这样,子类可以在不修改基类代码的情况下,通过重写特定...

    [浪曦原创]JAVA设计模式.第10讲.模板方法模式.rar

    **模板方法模式(Template Method Pattern)**是一种行为设计模式,它在面向对象编程中扮演着重要角色。在Java中,这种模式允许我们定义一个算法框架,而将具体步骤的实现延迟到子类中。模板方法模式是基于继承的,...

    设计模式之模板方法(Template)

    模板方法模式的核心是抽象类,它包含了模板方法,该方法定义了算法的基本结构,由一系列基本操作组成。这些基本操作可以是具体方法或钩子方法。具体方法是已经实现的方法,而钩子方法是空的方法,留给子类去实现。...

    模板方法模式-考试题目03.rar_C++

    5. **封装变化**:模板方法模式的主要目标是封装那些可能变化的部分,使得代码结构更稳定,更容易维护和扩展。 6. **开闭原则**:遵循设计原则中的“开闭原则”,对修改关闭,对扩展开放。即在不修改原有代码的基础...

    模板模式课件及代码-极客学院

    模板方法模式遵循了“开闭原则”,即对扩展开放,对修改关闭,使得代码更易于维护和扩展。 在极客学院的课程中,模板模式的讲解可能包括以下几个方面: 1. **模式定义**:模板模式定义了一个操作中的算法骨架,而...

    PHP设计模式之模板方法模式定义与用法详解

    模板方法模式是一种行为设计模式,它允许在定义行为框架的同时,允许子类在不改变结构的情况下重定义某些特定步骤。这种模式在PHP中被广泛应用于创建具有通用算法流程的类,其中一部分步骤由抽象基类定义,另一部分...

    设计模式之模板模式

    模板方法模式在Java中的实现通常涉及抽象类和继承,下面我们将深入探讨这一模式的各个方面。 1. **模式结构**: - **抽象类(Abstract Class)**:定义了一个操作中的算法骨架,声明了模板方法以及一些基本操作。...

    Python设计模式之模板方法模式实例详解

    5. **使用场景**:当存在一组算法有相同的结构,但具体步骤不同,模板方法模式是一个很好的选择,可以减少代码重复,提高代码复用性。 模板方法模式在Python中广泛应用于各种场景,如游戏框架、报告生成、数据处理...

    C++设计模式代码资源3_Template Method_模板方法.zip

    5. **使用场景**:模板方法模式适用于当有多个类有一些共同的算法步骤,但又希望这些步骤的执行顺序和部分逻辑可以根据实际情况有所不同的情况。例如,在游戏开发中,不同的角色可能有相似的攻击动作,但攻击效果...

    模板方法设计

    1. **抽象类(Abstract Class)**:这是模板方法模式的基础,它定义了一个操作中的算法框架,并声明了一个或多个抽象操作,这些操作由其子类实现。抽象类通常包含一个模板方法,它定义了算法的主要步骤,并调用了...

    qt5编写的使用模板类工厂模式画图程序

    本示例中的"qt5编写的使用模板类工厂模式画图程序"聚焦于Qt5库的应用,结合了工厂模式和模板视图概念来高效地创建和管理图形界面中的元素。下面将详细介绍这两个关键知识点。 **工厂模式** 工厂模式是一种创建型...

    23钟设计模式之模版方法模式

    模板方法模式是面向对象设计模式中的行为模式之一,它的核心思想是定义一个操作中的算法骨架,而将一些步骤延迟到子类中。这样使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。在上述例子中,`...

    设计模式总结-模板设计模式,单例模式(singleTon)

    1. **定义操作框架**:模板方法定义了一个算法的结构,把构成算法的一些步骤抽象化,这些步骤由子类来具体实现。 2. **封装变化**:将不变的部分封装到父类中,而将变化的部分留给子类去实现。这样既保证了算法的...

    Android编程设计模式之模板方法模式详解

    模板方法模式是设计模式中的一种行为模式,它在Android编程中有着广泛的应用。该模式的主要目的是定义一个操作的算法骨架,而将一些步骤的实现延迟到子类中,使得子类可以在不改变算法整体结构的情况下重定义特定...

    Spring 学习 JdbcTemplate,模板模式,回调

    用户可以通过扩展或自定义模板方法来实现特定的数据库操作逻辑。 **3. 回调机制** 回调机制是程序设计中的一种技术,它允许一个函数在执行过程中调用用户提供的函数或方法。在Spring JdbcTemplate中,回调机制体现...

    精品源码 C# 27种设计模式源代码

    2 模板方法模式 3 策略模式 3 工厂方法模式 3 组合模式 4 抽象工厂模式 4 代理模式 4 命令模式 5 迭代器模式 5 适配器模式 5 原型模式 6 简单工厂模式 6 解释器模式 6 享元模式 7 桥接模式 7 状态模式 8 结构型模式...

Global site tag (gtag.js) - Google Analytics