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

设计模式学习-模板方式模式Template Method

阅读更多
模板方式


好处包括
1:能够解决代码冗余问题
2:把某些算法步骤延迟到子类,子类可以根据不同情况改变/实现这些方法,而子类的新方法不会引起既有父类的功能变化
3:易于扩展
4:父类提供了算法的框架,控制方法执行流程,而子类不能改变算法流程,子类方法的调用由父类模板方法决定,执行步骤的顺序有时候非常重要,我们再容器加载和初始化资源时,为避免子类执行错误的顺序,经常使用该模式限定子类方法的调用顺序
5:父类可以把那些重要的不允许改变的方法屏蔽掉,不让子类去覆写(Override/Overwrite)它们。如java的final活private即可




引入回调:
例如,查询数据库的记录,首先获取Connection对象,然后创建Statement实例并执行相关查询,最后处理查询结果并在整个执行过程中处理异常。可发现,除了处理查询结果不一样,其他都是一样的,则可用模板方法模式,但是由于各种各样查询太多,则需要创建很多子类处理查询结果。引入回调。
回调表示一段可执行逻辑的引用(或指针),我们把该引用传递到另外的一段逻辑或者方法里供这段逻辑适时调用。可参考Spring JDBCTemplate的实现,它就使用了这个模式



[来自《java与模式》]
模板方法模式是类得行为模式。准备一个抽象类,讲部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法迫使子类实现剩余的逻辑。
模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则给出这个算法的哥哥逻辑步骤。代表这些具体逻辑步骤的方法称作基本方法,而将这些基本方法总汇起来的方法叫做模板方法。







模板方法在代码重构中的应用
1)将大方法打破
2)建立取值方法
   因为1)实现后,原来在方法内部声明的属性原本是局部变量。为了能将这些变量与基本方法共享,有2方法:一是将它们改为超累层次上的私有或者保护变量;二是建立一些抽象取值方法,而将取值方法的实现推迟给子类。也就是说,每个变量都封装在一个方法里面,这个方法所作的唯一事情就是返还这个变量。
这样做的好处是可以将状态的声明尽量推迟到子类,而使得等级结构的高端与状态无关
3)建立常量方法。
   常量也应当以常量取值方法的形式封装起来。
  • 大小: 50.8 KB
  • 大小: 37.5 KB
  • 大小: 69.8 KB
  • 大小: 20.4 KB
  • 大小: 86.9 KB
  • 大小: 169.2 KB
分享到:
评论

相关推荐

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

    - 模板方法模式(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 - 访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义作用于...

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

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

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

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

    template-method-demo 模板方法示例

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

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

    设计模式的学习过程通常分为四个阶段:学习、表达、教授、记录。每个阶段都需要不同的技能和深度的理解。 #### 0.2 设计模式解析后记 在完成所有设计模式的学习和解析之后,开发者会发现自己已经进入了一个新的...

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

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

    java设计模式---诙谐易懂版

    代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template Method...

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

    - 模板方法模式(Template Method):在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 - 访问者模式(Visitor):表示一个作用于...

    c++设计模式-行为型模式-模板方法模式

    c++设计模式-行为型模式-模板方法模式;qt工程;c++简单源码; 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重...

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

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

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

    设计模式是面向对象编程中用于解决常见问题的一系列模板。它们为软件设计提供了标准化的解决方案,帮助开发者更好地组织代码,提高软件的可维护性和可扩展性。本文档旨在深入探讨由Erich Gamma、Richard Helm、Ralph...

    java设计模式-模板模式

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

    设计模式专题之(十三)模板模式---设计模式模板模式示例代码(python--c++)

    模板模式是一种行为设计模式,它使你能在不破坏封装性的前提下,定义执行算法的框架,而将一些步骤延迟到子类中。这样,你就能创建一个可复用的框架,将具体步骤留给子类来实现。这个模式的核心思想是抽象类定义了一...

    26种设计模式-----pdf

    设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板。这个压缩包文件名为"26种设计模式",其中可能详细介绍了软件开发中的26个核心设计模式。这些模式是经过时间检验、被广泛接受并反复使用...

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

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

    设计模式PPT---25种设计模式详解

    9. 模板方法模式(Template Method):在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。 10. 访问者模式(Visitor):在不改变类结构的情况下,为对象添加新的操作。 这份PPT涵盖了设计模式的全貌,...

    23种 设计模式---面向对象的基本原则

    - 模板方法模式(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 - 访问者模式(Visitor):表示一个作用于某对象...

    java版本二十三种设计模式.zip

    - 模板方法模式(Template Method) - 策略模式(Strategy) - 责任链模式(Chain of Responsibility) - 中介者模式(Mediator) - 访问者模式(Visitor) - 命令模式(Command) - 解释器模式(Interpreter) - 迭代器...

    设计模式-模板方法模式(讲解及其实现代码)

    模板方法模式是一种行为设计模式,它允许在定义行为框架的同时,延迟部分具体步骤到子类中实现。这种模式主要用于在父类中定义算法的骨架,而将一些步骤的实现细节留给子类去完成,从而使得不同的子类可以重用相同的...

Global site tag (gtag.js) - Google Analytics