参见:http://xhmj12.blogspot.com/2015/05/design-patterntemplate-method-pattern.html
模板方法(Template Method)设计模式
模板方法模式定义如下:
Template Method Pattern: Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
即定义一个操作中算法的骨架,而降一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可以重定义该算法的某些特定步骤。
模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。
模板方法模式是结构最最简单的行为型设计模式。在其结构中只存在父类和子类之间的继承关系。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中,在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行结果。
模板方法模式提供了一个模板方法来定义算法框架,而某些具体步骤的实现可以在其子类中完成。
其UML类图如下:
如上类图可知,模板方法包含如下:
1.AbstractClass:该类是一个abstract类,里面有一个模板方法(Template Method),用于定义一个算法的框架。模板方法不仅可以调用该抽象类中实现的基本方法,也可以是该类中的抽象方法(该抽象方法由其子类根据具体业务逻辑而不同实现),当然还可以调用其他对象中的方法。
2.ConcreteClass(具体子类):抽象类的子类,用于实现在父类中声明的抽象基本操作以完成子类特算法的步骤,也可以覆盖在父类中已经实现的具体基本操作。
具体实例
项目中使用template mthod模式的地方很多,现以项目中的一个具体例子来讲解。
例如:Android开发中,一般都是通过http请求返回json串,然后解析json串成对应的实体来展现。而为了网络传输的安全,我们一般需要对请求返回的json字符串进行加密,然后再进行解密,最后在进行解析。而不管返回哪种实体类对应的字符串,解密方法和过程是一样,而具体的解析实体类过程不一样,这是就可以使用模板方法模式。
public abstract class BaseJsonAnalysis { // 需要解密标示 private String NEED_DECRYE = "1"; //模板方法 public <T> T parseRawJson(String rawJsonData){ rawJsonData = decrypt(rawJsonData); return (T)paresJson(rawJsonData); } //返回解密后字符串 public String decrypt(String rawJsonData) { if (!TextUtils.isEmpty(rawJsonData)) { try { String dataStr = rawJsonData; JSONObject mContent = new JSONObject(dataStr); String encrypt = mContent.optString("encrypt"); if (!TextUtils.isEmpty(encrypt)) { dataStr = mContent.optString("data"); if(NEED_DECRYE.equals(encrypt)) { dataStr = Utils.dataDecrypt(dataStr); } } return dataStr; }catch (Exception e) { e.printStackTrace(); } } return rawJsonData; } //具体怎么解析;由具体子类实现; protected abstract <T> T paresJson(String JsonData); }
public class UserAnalysis extends BaseJsonAnalysis{ @Override public User paresJson (String JsonData) { if(!TextUtils.isEmpty(JsonData)) { //........ //进行具体的解析; return user; } return null; } }
注意:
为了防止恶意的操作,一般模板方法都加上final关键字,不允许被覆写。
相关推荐
### 深入浅出设计模式之模板方法模式 #### 一、模板方法模式概述 设计模式是软件工程中一种非常重要的技术手段,它能够帮助我们解决常见的编程问题,并提高代码的可重用性、可扩展性和可维护性。模板方法模式是一...
Java设计模式之模板方法模式是Java认证考试中的一种重要的设计模式,它通过使用继承关系来定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤...
本文实例讲述了Android编程设计模式之模板方法模式。分享给大家供大家参考,具体如下: 一、介绍 在面向对象开发过程中,通常会遇到这样的一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,...
模板方法模式是面向对象设计模式中的行为模式之一,它在Java编程中有着广泛的应用。这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定...
### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...
模板方法模式是软件设计模式中的一种行为模式,它在面向对象设计中扮演着重要的角色,尤其是在代码复用和保持代码结构整洁方面。该模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一...
模板方法模式是一种行为设计模式,它允许在抽象类中定义算法框架,而将具体步骤的实现推迟到子类中。这种模式通常用于那些算法的骨架已经固定,但部分步骤可以根据具体环境有所不同的情况。 在Java中,模板方法模式...
本文实例讲述了Python设计模式之模板方法模式。分享给大家供大家参考,具体如下: 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子类中.模板方法使得子类可以不改变一个算法的...
"java设计模式之模板方法模式详解" 模板方法模式是一种行为设计模式,主要用于定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。...
Java经典设计模式之模板方法模式定义与用法示例 模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中去执行。模板方法模式使得子类可以不改变一...
模板方法模式是设计模式中行为模式的一种,它在软件工程中扮演着重要的角色,尤其是在创建算法框架时。这种模式允许我们在抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现,使得子类可以不改变算法的结构...
模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...
策略模式结合模板方法模式的设计思路 策略模式结合模板方法模式是策略模式的一种变形,目的是为了解决策略模式中的一些共性问题。在策略模式中,经常会出现这样一种情况,就是发现这一系列算法的实现上存在公共功能...
模板方法模式是设计模式中的一种行为模式,它在软件工程中扮演着重要的角色,尤其是在C++这样的面向对象编程语言中。这种模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的...
在这个场景下,"设计模式之模板方法测试代码"指的是一个用于验证模板方法模式实现的C++代码示例。 模板方法模式的核心思想是封装不变的部分,定义可变的行为。这种模式通常用于当有多个类实现了相同算法的不同部分...
模板方法模式是面向对象设计模式中的一种,它属于行为模式,主要用来定义对象间的一系列操作顺序,而将一些步骤的实现延迟到子类中。这样可以使得子类不改变算法的结构即可重定义该算法的某些特定步骤,从而实现多态...
模板方法设计模式是一种行为设计模式,它...模板方法设计模式是设计模式中的基础模式之一,理解并正确使用它可以提高软件的灵活性、可维护性和扩展性。在实际开发中,我们应该根据需求灵活运用,以达到最佳的设计效果。