封装算法: 模板方法(Template Method)模式
template method(模板方法)模式是一种行为型设计模式。它在一个方法中定义了算法的骨架(这种方法被称为template method。模板方法),并将算法的详细步骤放到子类中去实现。template method使得子类能够不改变一个算法的结构就可以重定义该算法的某些特定步骤。
须要指出的是,这里所说的template并非c++中的模板。
适用性
算法的骨架事先已确定,仅仅是算法的某些步骤的详细实如今不同的子类中有所不同
优点
- 算法的基本骨架已确定,子类能够方便地实现算法的变体
- 避免代码的反复,算法的步骤已经在父类中定义。子类依据须要仅仅须实现某些步骤就可以
应用
template method常常被应用在框架(framework)中,在框架中定义了通用的实现和基础的功能,并为详细的实现预留了“占位符”,框架的使用者仅仅须要又一次定义这些“占位符”就可以。
实现
首先我们定义一个抽象类Game。
在Game类中定义了一个声明为final的template method: play()。
play()方法包括了三个方法的调用,分别为initialize(),startPlay(),endPlay(),这三个方法都声明为abstract类型,表明在子类中须要详细实现这些方法。
Game.java
public abstract class Game {abstract void initialize();abstract void startPlay();abstract void endPlay();// template methodpublic final void play(){// initialize the gameinitialize();// start gamestartPlay();// end gameendPlay();}
}
接着。我们定义了Basketball和Football类,它们都是Game的子类,并重写了当中的initialize()。startPlay()。endPlay()方法。
Basketball.java
public class Basketball extends Game {@Overridevoid endPlay() {System.out.println("Basketball Game Finished!");}@Overridevoid initialize() {System.out.println("Basketball Game Initialized! Start playing.");}@Overridevoid startPlay() {System.out.println("Basketball Game Started. Enjoy the game!");}
}
Football.java
public class Football extends Game {@Overridevoid endPlay() {System.out.println("Football Game Finished!");}@Overridevoid initialize() {System.out.println("Football Game Initialized! Start playing.");}@Overridevoid startPlay() {System.out.println("Football Game Started. Enjoy the game!");}
}
最后,我们编写測试类,例如以下:
TemplatePatternDemo.java
public class TemplatePatternDemo {public static void main(String[] args) {Game game = new Basketball();game.play();System.out.println();game = new Football();game.play(); }
}
程序的输出例如以下:
Basketball Game Initialized! Start playing.
Basketball Game Started. Enjoy the game!
Basketball Game Finished!Football Game Initialized! Start playing.
Football Game Started. Enjoy the game!
Football Game Finished!
參考资料
- https://en.wikipedia.org/wiki/Template_method_pattern
- http://www.javacodegeeks.com/2013/03/template-method-design-pattern-in-java.html
- http://www.tutorialspoint.com/design_pattern/template_pattern.htm
转载于:https://www.cnblogs.com/gavanwanggw/p/7207277.html
封装算法: 模板方法(Template Method)模式相关推荐
- 设计模式--模板方法(Template Method)模式
模式定义 定义一个操作的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法某些特定步骤 类图 要点总结 Template Method模式是一种非常基础性的设计模式, ...
- 对Strategy与Template Method模式的区别的一些讨论
准备抛弃自己原本在用的另一个blog了,开始把原本的一些文转过来. 这篇是[misc] 前两天与axx大聊天的一些记录. 转载开始: 10/02 2007, 星期二 主要是对Strategy与Temp ...
- 白话设计模式--行为型模式--Template Method模式(模板方法模式)
结构型模式就这么结束了,行为型模式就这么开始了. 首先就是最简单最容易最常用的Template Method模式. 我们怎么定义 Template Method模式呢?简单来说,就是先定义一个骨架(框 ...
- Strategy模式和Template Method模式的异同浅析
一.Strategy模式 1. 特点说明: 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换. 适用场景: 许多相关的类仅仅是行为有异."策略"提供了一种用多个行为中的 ...
- 咕泡-模板方法 template method 设计模式笔记
2019独角兽企业重金招聘Python工程师标准>>> 模板方法模式(Template Method) 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中 Template Met ...
- 31模板方法(Template Method)
无处不在的Template Method 如果你只想掌握一种设计模式,那么它就是Template Method! 动机(Motivate): 变化 -----是软件设计的永恒主题,如 ...
- 模板方法(Template Method)
无处不在的Template Method 如果你只想掌握一种设计模式,那么它就是Template Method! 动机(Motivate): 变化 -----是软件设计的永恒主题,如何 ...
- 23种设计模式(三) —— 手写实现 Template Method 模式 (将具体交给子类)
手写模板方法 三.Template Method 模式 3.1 什么是 Template Method 模式 3.2 示例程序 3.3 Template Method 模式中登场的角色 3.3.1 A ...
- 设计模式学习笔记(八)—Template Method模式
factory模式(包括简单工厂和抽象工厂),Strategy模式,Template method模式是学习Spring框架必不可少的. <设计模式>一书对Template Method模 ...
最新文章
- Nginx源码分析--字符串处理
- JavaScript中判断为整数的多种方式
- CentOS6.8下安装memcached并设置开机自启动
- linux spf13 vim安装,Linux 下安装 spf13-VIM
- NoSQL Manager for MongoDB 破解
- 计算机软考初级信息技术试题及答案,2015年软考信息技术处理员考试模拟试题及答案...
- aspose合并单元格
- oracle list分区添加,oracle 11g 如何创建、修改、删除list-list组合分区
- TLF(TextFlow) 总结-FLEX
- RPC框架原理及从零实现系列文章(四):支持zookeeper注册中心与负载均衡
- win10电脑自带的office突然变成英文解决办法
- suse linux启用80端口,SuSE Linux防火墙配置
- 于繁华中寻觅一份淡然(街灯上的藤蔓)
- springboot+个人博客 毕业设计-附源码191613
- 18岁误入网站_是市场驱动的技术领先现代医学误入歧途
- HG 兄弟组织 D2 的“民营技术日报”故事
- 保持专注的10个小技巧
- 寻找最称手的思维导图软件(思维导图大比拼)
- 操作系统 - 虚拟内存
- Windows7安装SQLServer2005没有安装实例
热门文章
- RestClient使用
- WDLINUX (Centos5.8) 安装 bcmath
- OpenCV初探 —— 将OpenCV窗口链接在MFC的PictureControl控件中
- Netty工作笔记0046---异步模型原理剖析
- Netty工作笔记0011---Channel应用案例2
- 深度学习工作笔记002---曼哈顿距离_欧氏距离
- DataBseDesign工作笔记003---ERStudio使用笔记_基本使用方法详解
- linux shell 读取for循环中出现难处理的数据之单引号错误实例
- cocos之观察者模式应用实例
- 用Delphi中的Indy控件实现收发邮件