封装算法: 模板方法(Template Method)模式
来源:互联网 发布:淘宝一手单 编辑:程序博客网 时间:2024/06/04 17:54
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 method public final void play(){ // initialize the game initialize(); // start game startPlay(); // end game endPlay(); }}
接着,我们定义了Basketball和Football类,它们都是Game的子类,并重写了其中的initialize(),startPlay(),endPlay()方法。
Basketball.java
public class Basketball extends Game { @Override void endPlay() { System.out.println("Basketball Game Finished!"); } @Override void initialize() { System.out.println("Basketball Game Initialized! Start playing."); } @Override void startPlay() { System.out.println("Basketball Game Started. Enjoy the game!"); }}
Football.java
public class Football extends Game { @Override void endPlay() { System.out.println("Football Game Finished!"); } @Override void initialize() { System.out.println("Football Game Initialized! Start playing."); } @Override void 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
- 封装算法: 模板方法(Template Method)模式
- 模板方法模式(Template Method Pattern)——封装算法
- 模板方法模式(Template Method)
- Template Method - 模板方法模式
- 模板方法模式(Template Method)
- 模板方法(Template Method)模式
- Template Method (模板方法模式)
- 模板方法模式--Template Method
- Template Method模板方法模式
- 模板方法模式(Template Method)
- 【模板方法模式(Template Method)】
- 模板方法模式(Template method)
- Template Method - 模板方法模式
- 模板方法模式(Template Method)
- 模板方法模式 Template Method
- 模板方法模式(Template Method)
- 模板方法模式(Template Method)
- 模板方法模式(Template Method)
- sysbench 测试工具安装使用
- 家用投影机大戏即将上演,爱普生如何做到一骑绝尘?
- USB Mass Storage协议
- 0000005_java学习之路_ko+jquery获取select选中项信息
- 阿里巴巴2016校园招聘在线笔试(C/C++)附加题 第二题
- 封装算法: 模板方法(Template Method)模式
- 【面试】58同城-Linux后台开发实习生
- hdu 3790 最短路径问题 spfa
- DNN结构演进History—LSTM网络
- cdecl、stdcall、fastcall函数调用约定区别
- 说一下fragment中常用的几个周期性方法
- http协议
- C++ Tips: 在控制台中显示中文
- 教你pdf如何转换成html