`
Goldice
  • 浏览: 106964 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

#每天一种设计模式# 模板方法

阅读更多

《松本行弘的程序世界》对模板方法(Template method)的说明非常清晰:

在父类的一个方法中定义算法的框架,其中几个步骤的具体内容则留给子类来实现。

 

比如一个用于公司欢迎同事的程序:

 

class A
        def initialize
                @name = "jinbin"
                @word = "hello"
        end 
     
        def say_word
                puts "Welcome to New Company"
                puts "#@word,#@name"
        end 
end

a=A.new
a.say_word

 

 某天,需求忽然增加了,不仅要适用于公司,还需要适用于学校。Still easy:

 

class A
        def initialize
                @name = "jinbin"
                @word = "hello"
        end 
     
        def say_word symbol
                if symbol == "company"
                puts "Welcome to New Company"
                elsif symbol == "school"
                puts "Welcome to New School"
                end 
                puts "#@word,#@name"
     
        end 
end

a=A.new
a.say_word "company"
a.say_word "school"

 

然后又有一天,需求又变了,原来的欢迎词太单调了,希望针对不同场景设计不同的欢迎词;然后又希望能增加对医院、法院等等场景的支持,然后又有一天,希望你能支持欢迎多人的工作。。。

OK!我们冷静一下,思考下最基本的问题,什么是在变的?什么是保持不变的?

场景在变,以及对应的欢迎词在变化,但是欢迎词的输出步骤没有变化,一段描述性文字,再加上个人信息。OK,我们将变与不变的部分分离开。

 

class A 
        def initialize
                @name = "jinbin"
                @word = "hello"
        end 
     
        def say_word
                say_welcome
                say_personal
        end 

        def say_welcome
                raise "Called abstract method : say_welcome"
        end 

        def say_personal
                raise "Called abstract method : say_personal"
        end 
end

class Company_welcome < A 
        def say_welcome
                puts "Welcome to New Company"
        end 
     
        def say_personal
                puts "#@word,#@name"
        end 
end


a=Company_welcome.new
a.say_word 

 

no matter 你的场景怎么变,我只需要根据你的需求编写继承类中对应的方法就OK了。

 

Template Method Pattern 也许是GoF pattern中最简单的一种了。


 

 

  • 大小: 33.3 KB
1
1
分享到:
评论

相关推荐

    深入浅出设计模式之模板方法模式

    模板方法模式是一种行为型设计模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中实现。它使得子类可以在不改变一个算法结构的情况下,重新定义该算法的某些特定步骤。 #### 二、模板方法模式的结构 ...

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

    为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的设计模式。通过将不变的部分抽象出来作为模板,而允许子类重新定义某些步骤的行为,从而达到代码复用的目的。本文将详细介绍模板方法模式的基本概念、...

    设计模式之模板方法模式

    总的来说,模板方法模式提供了一种代码复用的有效手段,允许在不修改原有代码的基础上扩展功能,提高了软件的灵活性和可维护性。它是设计模式中一个非常实用的工具,对于理解和掌握面向对象设计有重要的意义。在开发...

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

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

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

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

    设计模式的模板方法模式的例子

    模板方法模式是设计模式中行为模式的一种,它在软件工程中扮演着重要的角色,尤其是在创建算法框架时。这种模式允许我们在抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现,使得子类可以不改变算法的结构...

    23种设计模式23种设计模式

    根据题目给出的信息,“23种设计模式”显然是一个重点,这通常指的是Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides(四人也被称为Gang of Four,简称GoF)在他们著名的著作《设计模式:可复用面向对象...

    mvc设计模式和模板模式ppt

    模板模式是一种行为型设计模式,它定义了一个操作的算法骨架,并将一些步骤延迟到子类中实现。这种模式允许子类在不改变算法结构的情况下重定义算法的某些步骤。 #### 二、模板模式的组成 1. **抽象模板类**:定义...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    通过本文档的学习,读者不仅能够了解每种设计模式的基本概念和应用场景,还能够掌握其实现方法。更重要的是,理解设计模式背后的思想,有助于培养出更好的面向对象设计思维,提高软件设计的质量。

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

    模板设计模式是一种行为型设计模式,它定义了一个算法的骨架,并允许子类为算法的某些步骤提供具体的实现。通过这种方式,算法的基本流程保持不变,但各个步骤可以根据实际需求进行定制。 在给出的部分代码中,我们...

    23种经典设计模式UML图

    以上23种设计模式,每一种都有其独特的应用场景和解决的问题,通过对这些模式的学习和实践,开发者能够更好地设计和构建出高效、稳定、易于维护的软件系统。在实际项目中,根据具体需求灵活运用这些设计模式,可以...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...

    c#代码介绍23种设计模式-14模板方法模式(附代码)

    在设计模式中,模板方法模式中模板和生活中模板概念非常类似,下面让我们就详细介绍模板方法的定义,大家可以根据生活中模板的概念来理解模板方法的定义 1. 模板方法模式的定义 模板方法模式——在一个抽象类中定义...

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

    策略模式结合模板方法模式是一种非常有用的设计思路,它可以使得策略模式更加灵活和可扩展,并且可以更好地解决一些共性问题。但是,在使用策略模式结合模板方法模式时,需要注意算法实现的变化部分,确保算法实现的...

    设计模式全解视频(共29集)

    在软件开发领域,设计模式是一种被广泛采用的解决常见问题的方法。通过学习设计模式,开发者可以更好地理解如何构建可维护、可扩展且高效的系统。本篇文章将基于标题为“设计模式全解视频(共29集)”的内容,对设计...

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

    模板方法模式(Template Method Pattern)是一种行为型设计模式,它允许我们定义算法的骨架,并将部分步骤推迟到子类中实现。这种模式使得子类可以在不改变算法结构的情况下重新定义算法的某些步骤。 #### 模式背景...

    设计模式课程设计模板

    设计模式是软件工程中的一种最佳实践,用于解决在开发复杂应用程序时反复出现的问题。它是一种在特定上下文中已被证明有效的解决方案模板,可以被重复使用,以解决类似问题,提高代码的可读性、可维护性和复用性。...

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

    **模板模式**是一种行为设计模式,它允许在父类中定义算法的骨架,而将一些具体步骤的实现延迟到子类中。这种模式主要用于在代码中定义一套算法的框架,并允许子类在不改变算法整体结构的情况下重定义特定的步骤。 ...

Global site tag (gtag.js) - Google Analytics