`

设计模式与动态语言 之 模板方法(Template Method)

阅读更多
模板方法(Template Method): 属行为型模式,最常用,最简便

意图: 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。TempeleteMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

动机: 多种输出模板

适用:
  •    一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现
  •    公共行为在父类,不同之处分离为新的操作
  •    控制子类扩展。模板方法只在特定点调用“hook”操作,这样就只允许在这些点进行扩展。 像Rails中ActiveRecord所带的before_save,after_save 就是hook方法。


例子:
这个例子是以魔兽里面英雄(Hero)为父类,以大法(Dafa),牛头(Niutou)为子类,用模板方法来模拟"升级"这个算法.
class Hero
  attr_accessor :max_blood, :max_qi, :level
  attr_accessor :blood, :qi
  
  def initialize
    default_max_values
    @blood = max_blood * 1 #默认血为100%
    @qi = max_qi * 1       #默认蓝为100%
    @level = 1
  end
  
  def upgrade
    @level += 1
    up_max_blood
    up_max_qi
    p "level:#{level}", "max_b:#{max_blood}", "max_q:#{max_qi}"
  end
  
  def up_max_blood
    @max_blood *= 1.01
  end
  
  def up_max_qi
    @max_qi *= 1.005
  end
  
  def default_max_values
    @max_blood = 500.0
    @max_qi = 150.0
  end
end

class Niutou < Hero
  def up_max_blood
    @max_blood *= 1.01
  end
  
  def up_max_qi
    @max_qi *= 1.005
  end
  
  def default_max_values
    @max_blood = 700.0
    @max_qi = 100.0
  end
end

class Dafa < Hero
  def up_max_blood
    @max_blood *= 1.005
  end
  
  def up_max_qi
    @max_qi *= 1.02
  end
  
  def default_max_values
    @max_blood = 400.0
    @max_qi = 200.0
  end
end

df = Dafa.new
df.upgrade
nt = Niutou.new
nt.upgrade


例子原文件点击直接下载

类图:

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

相关推荐

    设计模式C++学习之模板方法模式(Template Method)

    模板方法模式(Template Method)是设计模式中行为型模式的一种,它定义了操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这个模式在C++编程中有着...

    Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现

    模板方法模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在C++这样的面向对象编程语言中。这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的...

    C++设计模式课件3_Template Method_模板方法.pdf

    ### C++设计模式课件3_Template Method_模板方法 #### 模板方法设计模式解析 模板方法模式(Template Method Pattern)是一种行为型设计模式,它允许我们定义算法的骨架,并将部分步骤推迟到子类中实现。这种模式...

    template-method-demo 模板方法示例

    模板方法设计模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色。这个模式允许我们在父类中定义一个算法的骨架,而将一些步骤延迟到子类中。子类可以重写某些步骤来实现定制化的行为,但整体算法结构保持...

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

    "模板方法"(Template Method)是设计模式中的一个经典概念,它属于行为设计模式,主要用在父类中定义一个算法的框架,允许子类在这个框架内重定义特定的步骤。这个模式通常用于代码复用和保持代码结构的一致性。 ...

    模板方法模式(TemplateMethod)原理图

    模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 具体来说,模板方法模式的关键特点包括: 抽象类:在抽象类中定义一个模板方法,该方法给出了算法的框架。 具体...

    设计模式--模板方法模式java例子

    模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...

    设计模式之模板方法模式

    模板方法模式是设计模式中行为模式的一种,它在软件开发中起到了重要的作用,尤其是在复杂的系统设计中。模板方法模式遵循“开闭原则”,允许我们定义一个算法的骨架,同时允许子类在不改变整体结构的情况下,对算法...

    TemplateMethod.rar

    在标签中,我们看到了“设计模式”和“TemplateMethod”,这是对压缩包内容的进一步确认,即它关注的是软件设计模式中的模板方法。 压缩包内的文件“TemplateMethod”可能是包含了模板方法设计模式实现的C++源代码...

    设计模式-Java语言中的应用(pdf)

    行为型模式如策略(Strategy)、观察者(Observer)、访问者(Visitor)和模板方法(Template Method),关注对象之间的交互和职责分配。 在Java中,设计模式的应用广泛且深入。例如,单例模式在系统配置、线程池等...

    设计模式-模板方法模式ppt

    ### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...

    C++设计模式之模板方法模式(TemplateMethod)

    模板方法模式是面向对象设计模式中的一种,它属于行为模式,主要用来定义对象间的一系列操作顺序,而将一些步骤的实现延迟到子类中。这样可以使得子类不改变算法的结构即可重定义该算法的某些特定步骤,从而实现多态...

    Template(模板模式)

    模板模式是一种行为设计模式,它使你能在不破坏封装性的前提下,定义对象间的一系列基本操作,并在子类中实现这些操作的具体步骤。在模板模式中,一个抽象类公开定义了执行它的方法的方式,而将具体实现延迟到子类中...

    TemplateMethod 模式与代码重构

    TemplateMethod(模板方法)设计模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色。这个模式允许我们在抽象类中定义一个算法的框架,同时允许子类在不改变算法结构的情况下重写算法中的特定步骤。通过...

    TemplateMethod.zip

    这个压缩包"TemplateMethod.zip"包含了关于C++实现模板方法设计模式的代码示例。 模板方法模式的核心思想是定义一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重定义该算法...

    设计模式之模板方法模式Java实现和类设计图

    模板方法模式是软件设计模式中的一种行为模式,它在面向对象设计中扮演着重要的角色,尤其是在代码复用和保持代码结构整洁方面。该模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一...

    设计模式之模板设计模式

    模板方法模式的核心概念包含两个主要部分:模板方法(Template Method)和钩子方法(Hook Method)。模板方法是在抽象类中定义的,它包含了整个操作流程的步骤,而这些步骤中有些是具体的,有些是抽象的。抽象步骤由...

    设计模式之模板方法测试代码

    在这个场景下,"设计模式之模板方法测试代码"指的是一个用于验证模板方法模式实现的C++代码示例。 模板方法模式的核心思想是封装不变的部分,定义可变的行为。这种模式通常用于当有多个类实现了相同算法的不同部分...

    C++设计模式编程中Template Method模板方法模式的运用

    总结来说,模板方法模式是C++设计模式中的重要组成部分,它通过定义算法的骨架和基本操作,实现了代码的复用和定制,使得程序设计更加灵活且易于维护。理解和熟练运用模板方法模式,能够帮助开发者更好地组织代码,...

    11.设计模式-模板方法模式1

    模板方法模式(Template Method Pattern)是一种行为设计模式,它允许在父类中定义算法的框架,然后由子类提供具体的实现。这种模式的核心是“模板方法”,它在父类中定义了一个操作的步骤顺序,并将某些步骤声明为...

Global site tag (gtag.js) - Google Analytics