Template Method是我们最常用的模式,也是最好理解的模式了.
意图: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中. Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤.
问题: 需要遵循一个过程或一系列步骤, 它们在某个具体层次上保持一致, 但单个步骤在更详细的层次上可能有不同的实现.
效果: 模板为代码复用提供了一个优秀的平台. 它们还有助于确保需要的步骤得到实现. 它们为每个具体类将重载后的步骤捆绑在一起, 因此只有在这些重载方法总是并且只能一起发生时, 才应该使用Template Method模式.
实现: 创建一个抽象类, 用抽象方法实现一个过程. 这些抽象方法必须在子类中得到实现, 用以执行过程的每个步骤. 如果这些步骤各自独立变化, 那么每个步骤都可以用Strategy模式来实现.
实例: 我们需要一个分页查询功能,针对不同的数据库有mysql的和oracle的,一般有这么几个步骤:
创建连接
格式化sql语句
让数据库执行sql语句
返回查询结果
其中创建连接和格式化sql语句是不同的, 让数据库执行sql语句与返回查询的操作都相同,我们可以这样实现:
将操作步骤都封装到抽象类中, 并将执行步骤都封装到抽象类中, 不同的操作各自实现
java 代码
- public abstract class QueryTemplate {
- protected List doQuery() {
- List dataList = new ArrayList();
- try {
- Connection conn = getConnection();
- String sql = formatSql();
- Statement stmt = conn.createStatement();
- ResultSet rs = stmt.executeQuery(sql);
-
- while (rs.next()) {
- dataList.add(rs.getString("name"));
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return dataList;
- }
-
- protected abstract Connection getConnection();
-
- protected abstract String formatSql();
- }
- public class OracleQTemplate extends QueryTemplate {
- public Connection getConnection() {
- System.out.println("getConnection");
- return null;
- }
-
- public String formatSql() {
- System.out.println("formatSql");
- return null;
- }
- }
- public class MysqlQTemplate extends QueryTemplate {
- protected Connection getConnection() {
- System.out.println("getConnection");
- return null;
- }
-
- protected String formatSql() {
- System.out.println("formatSql");
- return null;
- }
-
- }
是不是很简单呢? 其实就是我们常用的继承,哈哈, Template Method模式适用于"有几个不同但概念相似的步骤存在"的情况, 为我们提供了一个算法的框架.
代码实例: http://www.netobjectives.com/resources/books/design-patterns-explained/code-fragments
- 大小: 960.1 KB
分享到:
相关推荐
设计模式C++学习之模板方法模式(Template Method)
Head First 设计模式 (八) 模板方法模式(Template Method pattern) C++实现
C++设计模式课件3_Template Method_模板方法.pdf
C++设计模式代码资源3_Template Method_模板方法.zip
主要为大家详细介绍了C++设计模式之模板方法模式TemplateMethod,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Template Method.rarTemplate Method.rarTemplate Method.rarTemplate Method.rar模板设计模式
模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 具体来说,模板方法模式的关键特点包括: 抽象类:在抽象类中定义一个模板方法,该方法给出了算法的框架。 具体...
《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,...
23种设计模式(Design Pattern)的C++实现范例,包括下面列出的各种模式,代码包含较详细注释。另外附上“设计模式迷你手册.chm” 供参考。 注:项目在 VS2008 下使用。 创建型: 抽象工厂模式(Abstract Factory) ...
36种最新设计模式整理 Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 ...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...
创建型模式用来处理对象的创建过程,主要包含以下5种设计模式: 工厂方法模式(Factory Method Pattern) 抽象工厂模式(Abstract Factory Pattern) 建造者模式(Builder Pattern) 原型模式...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、AbstractFactory、FactoryMethod、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较特别...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...
设计模式(21)-Template Method Pattern 设计模式(20)-Visitor Pattern 设计模式(19)-Observer Pattern 设计模式(18)-Command Pattern 设计模式(17)-Chain of Responsibility Pattern 设计模式(16)...
主要介绍了C++设计模式编程中Template Method模板方法模式的运用,讲到了包括模板方法模式中的细分方法以及适用场景,需要的朋友可以参考下
Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术,在类库中尤其重要。变化一直以来都是软件设计的永恒话题,在XP编程中提倡拥抱变化,积极应对。如何更好的去抓住变化点,应对变化?如何更好...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...
工厂方法模式(Factory Method Pattern) 观察者模式(Observer Pattern) 建造者模式(Builder Pattern) 解释器模式(Interpreter Pattern) 命令模式(Command Pattern) 模板方法模式(Template Method Pattern) 桥接模式...