当前位置: 首页 > news >正文

Template Method模板方法

一.TemplateMethod Pattern

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。子类可以不改变算法结构,重新定义该算法的某些特定步骤,算法结构可以理解为根据需求设计出来的业务流程,特定步骤即是那些可能在内容上存在变数的环节,算法结构可以理解为根据需求设计出来的业务流程,特定步骤即是那些可能在内容上存在变数的环节。

二.两个应用场景

1.日志文件输出器

在软件系统中,常常需要输出一些日志文件。对于不同的客户来说可能需要不同的界面展现,例如对于我们程序员来说,只需要打印出简单的TXT文件即可。而对于挑剔的客户来说,他们总是希望日志文件的展现也能非常友好,例如XML形式。可能在某些情况下,又需要其他方式的展现。

对于同一份数据,展现给不同的群体,需要不同的风格。可以用Template Method来实现。如图一。

(1)AbstractLogManager:抽象类,日志管理类

(2)TxtLogManager:实现类,TXT格式日志输出类。

(3)XmlLogManager:实现类,XML格式日志输出类。

(4)createFileName: 创建文件名,在父类为抽象方法。在TxtLogManager类中文件起名为“*.txt”。在XmlLogManager类中文件起名为:“*.xml”。当然视需求,命名方式还可以有别的差别。

(5)createFileContent: 创建文件内容,父类中为抽象方法。子类中视各个文件格式差异而不同,例如在xml中,总要加上各种标签:<text></text>,<bofy></body>等等。

(6)saveFile:保存文件。视需求存储到不同的磁盘路径下。

(7)writeLogFile:模板方法,调用createFileName(),createFileContent(),还有saveFile().


图一:日志文件输出器类图


2.小应用程序

大公司都喜欢制定各种各样的行业标准,为的是快速开发出软件系统。例如现在的J2EE,.net,以及android开发等,厂商已经设计好顶层结构,我们只需写出一些实现类,即可完成很多应用。例如下面这个模式。

这是一个小应用程序框架,父类Applet作为抽象类,包含抽象方法init(),start(),stop(),destroy()。模板方法为run(),调用前面四个方法。至于run()函数中的逻辑,不是我们讨论的重点。而它里面的算法框架肯定是固定的。比如先初始化调用init(),在调用start(),中途停止掉stop(),退出则destroy().

而作为开发者,只需在子类中实现父类Applet中的三个抽象方法,即可产生新的小程序。如下图二所示。

放到

图二:小应用程序


相关文章:

  • UVA 10603 倒水问题
  • 程序员编程艺术第二十六章:基于给定的文档生成倒排索引(含源码下载)
  • Flume数据采集准备
  • 【Android】Menu不同菜单的使用介绍
  • python初识
  • Elasticsearch教程收集
  • 巧用Chrome格式化压缩后的js文件
  • 通过LoadBalancerClient获取所有服务列表的IP
  • HPUX Error 23 File table overflow
  • dockerfile 构建tomcat
  • 解决内存设置过大导致实例无法启动ORA-27100
  • Python输出输入
  • 给eMule设定HighID
  • 深入浅出Redis
  • TortoiseSVN 命令 (命令行执行工具)
  • .pyc 想到的一些问题
  • 4个实用的微服务测试策略
  • Laravel 菜鸟晋级之路
  • LeetCode29.两数相除 JavaScript
  • mysql外键的使用
  • node-glob通配符
  • passportjs 源码分析
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • WePY 在小程序性能调优上做出的探究
  • 工作手记之html2canvas使用概述
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 驱动程序原理
  • 如何学习JavaEE,项目又该如何做?
  • 思否第一天
  • 移动端解决方案学习记录
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 最简单的无缝轮播
  • elasticsearch-head插件安装
  • RDS-Mysql 物理备份恢复到本地数据库上
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #NOIP 2014# day.2 T2 寻找道路
  • (1)Nginx简介和安装教程
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (二)fiber的基本认识
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (一)基于IDEA的JAVA基础1
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .net反混淆脱壳工具de4dot的使用
  • .Net下的签名与混淆
  • @PreAuthorize注解
  • @RequestMapping处理请求异常
  • [ C++ ] STL---仿函数与priority_queue
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [Android Pro] Notification的使用
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [Avalon] Avalon中的Conditional Formatting.