`
Goldice
  • 浏览: 104710 次
  • 性别: 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
分享到:
评论

相关推荐

    设计模式(JAVA语言实现)--20种设计模式附带源码PPT模板.pptx

    logo 1工厂模式:一个接口封装更多接口工厂模式:一个接口封装更多接口 设计模式(JAVA语言实现)--20种设计模式附带源码PPT模板全文共22页,当前为第2页。 2桥接模式:定义一个接口、两个类都实现该接口桥接模式:...

    java23种设计模式

    java23种设计模式,每一种模式都有详细的讲解,很全面,如果你想深入了解一下java23种设计模式,这会非常适合你的哦!上传乃为百度云连接,失效请留言。 内容: 001策略模式! N. B8 ~' D! f9 j+ g0 I 002观察者模式 ...

    设计模式自己总结一句话描述

    设计模式分为三大类: 创建型模式,共五种: 工厂方法模式、抽象工厂模式、单例模式、构建者模式、原型模式。 结构型模式,共七种: 适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。...

    设计模式期末作业(要求5个以上的设计模式的模拟系统)

    这是我的设计模式作业:运用5个以上的设计模式创建一个系统。其中包括:1.单例模式 2.原型模式 3.抽象工厂模式+模板方法模式 4.代理模式 5.策略模式 详见博文:...

    详解设计模式中的模板方法模式及在C++中的使用

    模板方法模式是设计模式行为型中最简单的一种设计模式。在实际中你甚至可能经常用到,只是你自己不知道它是一种设计模式罢了。 模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得...

    JAVA23种设计模式及快捷记忆

    设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。工厂模式、抽象工厂模式、...

    经典Java23种设计模式.rar

    设计模式就是在工作中经常遇到的一类问题的解决方案,是一种解决问题的方法,更是一种思想,是智慧的结晶。 设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。 Java的23种设计模式 构成...

    24种设计模式介绍与6大设计原则

    还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降低耦合。 5、迪米特法则(最少知道原则)...

    设计模式的常用模板举例.zip

    设计模式(Design Patterns)是软件工程中一种重要的思想工具,它描述了在特定上下文中解决一般设计问题的最佳实践。自1990年代由“四人帮”(Gamma, Helm, Johnson, Vlissides)在《设计模式:可复用面向对象软件的...

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

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

    C#23种设计模式_示例源代码及PDF

    观察者模式: 让多个观察者对象同时监听某一个 观察者模式 观察者模式定义了一种一队多的依赖关系, 主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更 新自己。 20、STATE —...

    第26章_模板方法模式.ppt

    模板方法模式是基于继承的代码复用基本技术,模板方法模式的结构和用法也是面向对象设计的核心之一。在模板方法模式中,可以将相同的代码放在...模板方法模式体现了面向对象的诸多重要思想,是一种使用频率较高的模式。

    33种JAVA设计模式DEMO

    这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Pattern) 抽象工厂模式...

    java中的设计模式,主要的设计模式

    2. 设计模式是一种设计经验的总结 3. 设计模式是用来解决某些场景下的某一类问题--------通用的解决方案 4. 有了设计模式之后,可以让代码更容易被理解,确保了复用性、可靠性、可扩展性 单例模式、工厂方法模式、...

    C#设计模式.PDF

    完整的C#设计模式PDF版 C#设计模式(1) 4 一、 C# 面向对象程序设计复习 5 二、 设计模式举例 5 三、 先有鸡还是先有蛋? 7 四、 大瓶子套小瓶子还是小瓶子套大瓶子? 8 五、 .net本质 9 C#设计模式(2) 11 一、 ...

    设计模式之单例模式.pptx

    单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。 比如在某个服务器程序中,该服务器的配置信息存放...

    设计模式:可复用面向对象软件的基础--详细书签版

    简而言之,软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。  在本书中,Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides介绍了设计模式的原理,并且对这些设计模式进行了分类...

    javascript设计模式 – 模板方法模式原理与用法实例分析

    本文实例讲述了javascript设计模式 – 模板方法模式原理与用法。...模板方法是一种类行为型模式。 场景:我们设计一个游戏机,用来运行不同的游戏, 示例: var Game = function(){ this.play = function(){ this

    设计模式 GOF 23

    简而言之,软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。 在本书中,Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides介绍了设计模式的原理,并且对这些设计模式进行了分类...

Global site tag (gtag.js) - Google Analytics