`
crazyox
  • 浏览: 185349 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式之Template Method

阅读更多

Template Method是我们最常用的模式,也是最好理解的模式了.

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

问题:    需要遵循一个过程或一系列步骤, 它们在某个具体层次上保持一致, 但单个步骤在更详细的层次上可能有不同的实现.

效果:    模板为代码复用提供了一个优秀的平台. 它们还有助于确保需要的步骤得到实现. 它们为每个具体类将重载后的步骤捆绑在一起, 因此只有在这些重载方法总是并且只能一起发生时, 才应该使用Template Method模式.

实现:    创建一个抽象类, 用抽象方法实现一个过程. 这些抽象方法必须在子类中得到实现, 用以执行过程的每个步骤. 如果这些步骤各自独立变化, 那么每个步骤都可以用Strategy模式来实现.

实例:    我们需要一个分页查询功能,针对不同的数据库有mysql的和oracle的,一般有这么几个步骤:

创建连接
格式化sql语句
让数据库执行sql语句
返回查询结果
其中创建连接和格式化sql语句是不同的, 让数据库执行sql语句与返回查询的操作都相同,我们可以这样实现:

 

将操作步骤都封装到抽象类中,  并将执行步骤都封装到抽象类中,  不同的操作各自实现

java 代码
  1. public abstract class QueryTemplate {   
  2.     protected List doQuery() {   
  3.         List dataList = new ArrayList();   
  4.         try {   
  5.                              Connection conn = getConnection();   
  6.                              String sql = formatSql();   
  7.             Statement stmt = conn.createStatement();   
  8.             ResultSet rs = stmt.executeQuery(sql);   
  9.   
  10.             while (rs.next()) {   
  11.                 dataList.add(rs.getString("name"));   
  12.             }   
  13.         } catch (Exception e) {   
  14.             e.printStackTrace();   
  15.         }   
  16.         return dataList;   
  17.     }   
  18.   
  19.     protected abstract Connection getConnection();   
  20.   
  21.     protected abstract String formatSql();     
  22. }  

 

  1. public  class OracleQTemplate extends QueryTemplate {   
  2.     public Connection getConnection() {   
  3.         System.out.println("getConnection");   
  4.         return null;   
  5.     }   
  6.   
  7.     public String formatSql() {   
  8.         System.out.println("formatSql");   
  9.         return null;   
  10.     }   
  11. }   

 

 

  1. public class MysqlQTemplate extends QueryTemplate {   
  2.     protected Connection getConnection() {   
  3.         System.out.println("getConnection");   
  4.         return null;   
  5.     }   
  6.   
  7.     protected String formatSql() {   
  8.         System.out.println("formatSql");   
  9.         return null;   
  10.     }   
  11.   
  12. }  

是不是很简单呢? 其实就是我们常用的继承,哈哈, Template Method模式适用于"有几个不同但概念相似的步骤存在"的情况, 为我们提供了一个算法的框架.

代码实例: http://www.netobjectives.com/resources/books/design-patterns-explained/code-fragments

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

相关推荐

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

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

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

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

    TemplateMethod.rar

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

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

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

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

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

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

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    TemplateMethod.zip

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

    24种设计模式以及混合设计模式

    如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录模式(Memento)、状态模式(State)、职责链...

    template-method-demo 模板方法示例

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

    23种面向对象设计模式

    文档中的“23种设计模式学习笔记.doc”可能包含了对这23种模式的详细解释和实例,而“设计模式之我爱我家.doc”可能从一个更生活化的角度来阐述设计模式的概念。“软件23种设计模式,超级经典的.pdf”可能是对这些...

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

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

    Head.First设计模式_PDF

    第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton、Command、Adapter、Facade、Template Method、iterator、Composite、State、proxy。最后三章比较...

    TemplateMethod 模式与代码重构

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

    设计模式那点事

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决问题的可重用解决方案。《设计模式那点事》这本书的PPT为我们提供了一种深入理解和学习设计模式的途径。在这里,我们将深入探讨设计模式的核心概念、...

    20-Template Method.rar

    模板方法(Template Method)设计模式是一种行为型设计模式,它在面向对象编程中扮演着重要的角色。这个模式允许我们定义一个操作中的算法骨架,而将一些步骤延迟到子类中。这样,子类可以不改变一个算法的结构即可...

    c#设计模式

    在编程领域,设计模式是一种被广泛认可的解决常见问题的最佳实践。C#设计模式是针对C#编程语言的特定设计模式应用,它们是经验丰富的开发者们在面对软件设计时总结出的一系列可重用解决方案。这里我们将深入探讨23个...

    研磨设计模式(完整带书签).part2.pdf

    《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...

    C++设计模式(Design Pattern)范例源代码

    23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm” 供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) ...

Global site tag (gtag.js) - Google Analytics