定义

定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。

UML

优点

  1. 模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。
  2. 子类实现算法的某些细节,有助于算法的扩展。
  3. 通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。

缺点

  1. 每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。

应用场景

  1. 在某些类的算法中,用了相同的方法,造成代码的重复。
  2. 控制子类扩展,子类必须遵守算法规则。

示例

使用模板方法来读取XML和数据库中的数据。

Java

 import java.util.HashMap;
import java.util.Map; public class Main
{
public static void main(String[] args)
{
DataView dataView; dataView = new XMLDataView();
dataView.loadData();
dataView.show(); dataView = new DatabaseDataView();
dataView.loadData();
dataView.show();
} /**
* 数据显示基类
*/
public static abstract class DataView
{
private Map<String, String> _map; /**
* 加载数据
*/
public void loadData()
{
_map = parseData();
} /**
* 模板方法,针对不同的数据源编写不同的读取和解析方法
*/
protected abstract Map<String, String> parseData(); /**
* 显示读取的数据
*/
public void show()
{
for (String key : _map.keySet())
{
System.out.println(key + ": " + _map.get(key));
}
}
} /**
* 读取外部XML中配置的数据
*/
public static class XMLDataView extends DataView
{
@Override
protected Map<String, String> parseData()
{
// TODO : 这里加载外部XML的数据并进行解析 Map<String, String> map = new HashMap<>();
map.put("数据1", "我是来自XML文件中的数据1");
map.put("数据2", "我是来自XML文件中的数据2");
return map;
}
} /**
* 读取数据库中配置的数据
*/
public static class DatabaseDataView extends DataView
{
@Override
protected Map<String, String> parseData()
{
// TODO : 这里加载数据库中的数据并进行解析 Map<String, String> map = new HashMap<>();
map.put("数据1", "我是来自数据库中的数据1");
map.put("数据2", "我是来自数据库中的数据2");
return map;
}
}
}

行为类模式(十):模板方法(Template Method)的更多相关文章

  1. 行为型设计模式之模板方法(TEMPLATE METHOD)模式 ,策略(Strategy )模式

    1 模板方法(TEMPLATE METHOD)模式: 模板方法模式把我们不知道具体实现的步聚封装成抽象方法,提供一些按正确顺序调用它们的具体方法(这些具体方法统称为模板方法),这样构成一个抽象基类.子 ...

  2. 一天一个设计模式——模板方法(Template Method)模式

    一.模式说明 现实世界中的模板是用于将事物的结构规律予以固定化.标准化的成果,它体现了结构形式的标准化.例如镂空文字印刷的模板,通过某个模板印刷出来的文字字体大小都是一模一样,但是具体使用什么材质的颜 ...

  3. 宋宝华:Linux设备驱动框架里的设计模式之——模板方法(Template Method)

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前言 <设计模式>这本经典 ...

  4. 模板方法(Template Method)(父类声明算法骨架,子类具体不同实现)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...

  5. 封装算法: 模板方法(Template Method)模式

    template method(模板方法)模式是一种行为型设计模式.它在一个方法中定义了算法的骨架(这种方法被称为template method.模板方法),并将算法的详细步骤放到子类中去实现.tem ...

  6. 设计模式之---模板方法template method的使用

    在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的.Template Method ...

  7. 设计模式二--模板方法Template method

    模式分类: 书籍推荐:重构-改善既有代码的设计 重构获得模式 设计模式:现代软件设计的特征是"需求的频繁变化".设计模式的要点是 "寻找变化点,然后在变化点处应用设计模式 ...

  8. 设计模式-模板方法模式(the Template Method Pattern)

    本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/ 模板方法模式简介 这是一个被用的相当广泛的一种设计模式,变体也特别多,他建立一个抽象类定义一个算 ...

  9. 设计模式六: 模板方法(Template Method)

    简介 模板方法属于行为型模式的一种. 实现层面上, 在抽象类中定义了算法或流程的骨架, 将其中易变的部分延迟到子类实现, 也就是允许它的子类实现其中的某些步骤. 模板方法适用于算法不变, 但算法中某些 ...

  10. 设计模式:模板方法(Template method)

    首先我们先来看两个例子:冲咖啡和泡茶.冲咖啡和泡茶的基本流程如下: 所以用代码来创建如下: 咖啡:Caffee.java public class Coffee { void prepareRecip ...

随机推荐

  1. 如何在cmd命令下运行python脚本

    1.打开cmd窗口,输入:cd c:\\python27  (首先得确认python已加入环境变量) 2.第二条命令:python[空格]完整的python脚本路径,运行即可 3.一个案例: Micr ...

  2. DLib库Base64编解码示例

    代码 #include <iostream> #include <fstream> #include <sstream> #include <string&g ...

  3. WD backup西部盘数据备份

    西部数据(WD),硬盘备份数据!防止数据丢失.损坏.... 起因: 电脑上存储很多资料,之前有500G的东芝硬盘(现在插头不灵敏),故决定换个好点的1T硬盘.电脑在一夜间打不开,不能识别硬盘!怎么重启 ...

  4. SpannableStringUtil实现丰富文字效果

    代码地址如下:http://www.demodashi.com/demo/15007.html 前言 在android开发中,我们不免会用到 TextView 的各种显示效果,如字体样式,颜色,大小, ...

  5. Mac终端查看sqlite3数据库、表数据等(含sqlite可视化工具下载)

    背景: 有时候,我们在用FMDB等库处理iOS数据库时,沙盒里保存的数据库格式为.sqlite3. 那么,我们如何查看这个数据库呢? 其实有两种方法: 1.借助工具 - Sqlite Database ...

  6. suricata 命令行解释【转】

    suricata命令行 转载地址:http://blog.sina.com.cn/s/blog_6f8edcde0101gcha.html suricata命令行选项说明 你能两种方式使用命令行选项, ...

  7. 转:SpringMVC中日期格式的转换

    解决日期提交转换异常的问题 由于日期数据有很多种格式,所以springmvc没办法把字符串转换成日期类型.所以需要自定义参数绑定.前端控制器接收到请求后,找到注解形式的处理器适配器,对RequestM ...

  8. sql server 删除所有表、视图、存储过程

    如果由于外键约束删除table失败,则先删除所有约束:   --/第1步**********删除所有表的外键约束*************************/   DECLARE c1 curs ...

  9. Win 7 IE11不能下载文件,右键另存为也不行

    在IE11中不能下载文件,右键另存为也无效. 发现 在IE11中点击“INTERNET选项”后,IE临时文件夹的地址没有显示,大小为0,修改只能让设置在8-8MB,注销再登录后,一切设置无效. 问题就 ...

  10. 一步一步掌握线程机制(三)---synchronized和volatile的使用

    现在开始进入线程编程中最重要的话题---数据同步,它是线程编程的核心,也是难点,就算我们理解了数据同步的基本原理,但是我们也无法保证能够写出正确的同步代码,但基本原理是必须掌握的. 要想理解数据同步的 ...