定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
主要解决在软件构建过程中,对于某一项任务,常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因而无法和任务的整体结构同时实现。
定义一个场景:我想大家都玩过极品飞车(我相当喜欢)。游戏中有很多的汽车,但是从操作角度看大同小异。无非是起步(StartUp)、行驶(Run)、停车(Stop)等等行为。汽车行驶的动作之间可能存在着差异,例如:手动档和自动档,但是接口是一样的,换句话说,基本都是这几个动作。结合Template Method模式讲就是在这个程序中,结构(对汽车的操作)是稳定的,但是变化在于各个子步骤(操作行为的具体实现)。
程序实现与结构分析
首先我们需要一个汽车的抽象类(结构图中的AbstractClass)
public abstract class AbstractCar
{
protected abstract string StartUp();
protected abstract string Run();
protected abstract string Stop();
public void DriveOnTheRoad()
{
Console.WriteLine(StartUp());
Console.WriteLine(Run());
Console.WriteLine(Stop());
}
}
在这段代码中,抽象方法StartUp、Run、Stop叫做primitive operation(原语操作),它们是在子类中的扩展点,例如我们要编写一辆BORA的实现,在他继承AbstractCar后,可以在这几个primitive operation上进行自己个步骤的实现。
AbstractCar中的DriveOnTheRoad方法叫做template method(模板方法),template method用primitive operation定义一个算法,是相对稳定的部分。(子类中重新定义primitive operation)。
然后我们要实现一辆BORA汽车(结构图中的ConcreteClass)
public class BORA : AbstractCar //继承
{
protected override string StartUp()
{
return "BORA is StartUp";
}
protected override string Run()
{
return "BORA is Running";
}
protected override string Stop()
{
return "BORA is Stoped";
}
}
客户程序的实现
class Program
{
static void Main(string[] args)
{
ClientApp.Drive(new BORA());
Console.Read();
}
}
public class ClientApp
{
public static void Drive(AbstractCar car)
{
car.DriveOnTheRoad();
}
}
运行结果如下:
BORA is StartUp
BORA is Running
BORA is Stoped
要点:
1、 Template Method模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为了很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。
2、 除了可以灵活应对子步骤的变化外,“Don't call me.Let me Call you”的反向控制结构是Template Method的典型应用。“Don’t call me.Let me Call you”是指一个父类调用一个子类的操作,而不是相反。
3、 在具体实现方面,被Template Method调用的虚方法可以具有实现,也可以没有任何实现(抽象方法、纯虚方法),但一般推荐将它们设置为protected方法。可以没有具体实现的方法应该称为hook operation(钩子操作),提供了缺省的行为,子类可以在必要时进行扩展。
4、 尽量减少primitive operation,因为需要重新定义的操作越多,客户程序就越长
分享到:
相关推荐
c++设计模式-行为型模式-模板方法模式;qt工程;c++简单源码; 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重...
开发者需要熟悉`cas.properties`和`application.yml`等配置文件,以便调整服务器的行为。 2. **服务管理**:CAS支持服务注册,每个受保护的应用都需要在CAS服务器上注册,定义其URL模式和服务验证方式。理解`...
### 设计模式之行为模式详解 #### 一、行为模式概览 行为模式是一类设计模式,关注于算法和对象间职责的分配。这类模式不仅仅描述了对象或类的结构,更重要的是描述了它们之间的通信模式,即如何通过对象间的交互...
6. **组件化开发**: Vue.js强调组件化开发,将UI拆分为可复用的组件,每个组件都有自己的视图、数据和行为。这使得代码更易于维护和扩展。 7. **响应式数据绑定**: Vue的核心特性之一是其双向数据绑定,即视图和...
例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template ...
- 模板方法模式(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 - 访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义作用于...
在实际项目中,开发者可以通过配置 `docma` 的选项来调整 `zebra` 模板的行为,例如更改样式、设置导航结构、添加自定义页脚等。这使得 `docma-template-zebra` 不仅适合小型项目,也能够应对大型复杂项目的文档需求...
模板模式(Template Pattern) ------------------------- 模板模式是一种行为设计模式,它定义了一个操作中的程序骨架,将一些步骤延迟到子类中实现。这使得子类可以在不改变程序结构的情况下重新定义程序中的某些...
2. 模板方法(Template Method)模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以在不修改算法结构的情况下重新定义该算法的某些步骤。 模板方法模式的优点是:可以实现算法的灵活性和可...
策略模式(Template模式) 策略模式是设计模式中的一种 객체行为型模式,它定义了一系列算法,封装每一个算法,并使它们可以互相替换。策略模式使得算法可以独立于使用它的客户而变化。 概述 在软件开发中,经常...
这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的解决方案的标准化描述,它们在软件工程中起到了重要的作用,帮助开发者创建可维护、可扩展且易于理解...
行为型模式主要涉及对象间责任分配和通信,比如策略模式(Strategy)、观察者模式(Observer)、职责链模式(Chain of Responsibility)、迭代器模式(Iterator)、命令模式(Command)和模板方法模式(Template ...
这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...
- 模板方法模式(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 - 访问者模式(Visitor):表示一个作用于某对象...
行为模式 - **Template Method模式**:定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 - **Strategy模式**:定义了一...
驻留模块是一种设计模式,通常用于构建大型、可维护的前端应用,它可以使得模块在应用程序的生命周期内始终保持活跃,而不是每次需要时才加载,从而提高应用性能。 `generator-inhabit-module-template` 的主要目标...
行为模式关注对象间的职责分配。 1. **Template Method模式** - **定义**:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 - **...
5. 模板设计模式:这是一种行为模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。这样可以让子类在不改变结构的情况下重定义该算法的某些特定步骤。 这本书可能会深入讲解每个模式的动机、结构、...