设计模式——模板方法(1)
2015-09-19 00:22
253 查看
模板方法适用于流程固定,具体步骤的实现确实变化的场景。举个例子,当你去游泳的时候你会经历
换衣服 -> 热身->游泳
这个流程是固定的,然而当具体到游泳的时候就千差万别了,你用蛙泳,仰泳,自由泳,蝶泳或者各种千奇百怪的姿势。模板方法在这个时候就有用武之地了。先来看一下模板方法的UML:
拿刚刚游泳为例来设计我们的类:
换衣服 -> 热身->游泳
这个流程是固定的,然而当具体到游泳的时候就千差万别了,你用蛙泳,仰泳,自由泳,蝶泳或者各种千奇百怪的姿势。模板方法在这个时候就有用武之地了。先来看一下模板方法的UML:
拿刚刚游泳为例来设计我们的类:
public abstract class Swimmer { public void swimActivity() { getChanged(); prepare(); swimming(); } private void getChanged() { System.out.println("Changing"); } private void prepare() { System.out.println("Preparing"); } protected abstract void swimming(); } public class BreaststrokeSwimmer extends Swimmer { @Override protected void swimming() { System.out.println("Swimming in breaststroke"); } } public class FreeStrokeSwimmer extends Swimmer { @Override protected void swimming() { System.out.println("Swimming in free stroke"); } } public class SwimmerFactory { public static Swimmer getBreaststrokeSwimmer() { return new BreaststrokeSwimmer(); } public static Swimmer getFreeStrokeSwimmer() { return new FreeStrokeSwimmer(); } } public class TestSwimmers { public static void main(String ...args) { Swimmer breaststroke = SwimmerFactory.getBreaststrokeSwimmer(); Swimmer freeStroke = SwimmerFactory.getFreeStrokeSwimmer(); breaststroke.swimActivity(); freeStroke.swimActivity(); } }这样,所有继承自Swimmer的类只需要实现swimming()方法,就可以使用swimActivity了。模板方法定义一个操作中的算法骨架,而将一些实现步骤延迟到子类当中,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板方法是比较基础的设计模式,应用十分广泛,被框架、类库大量采用。实际上即使不知道模板方法的存在,我们在写代码的时候还是经常会用到这种设计。
相关文章推荐
- 网络笔记01-3 socket 实现百度页面的两种方式
- Linux内存释放
- 工作好习惯(18之后)
- [看书][CSS精粹(第2版)]第二章 文本样式和基础知识
- 类,接口,抽象类的区别
- android 找工作
- Python的输入和raw_input()内建函数等以及相关运算符
- linux c、c++高并发服务内存泄露追踪分析
- Linux网络属性配置
- Android跳转页面的基本方式
- java控制台电话本 用io流和序列化实现
- Watch OS 2.0 健身宠物app开发心得[1]-Healthkit的sdk接入
- 网络加密HTTPS
- Linux 进程通信之 ——信号和信号量总结
- 断点续传原理
- 2015年Java后台开发面试问题分享汇总(主流互联网公司面试经历)
- java控制台中电话本 io流写入本地txt中
- 数组指针与指针数组的区别
- 检测用户的网络状态
- ZOJ 3896 Permutation (JAVA IO, CRT)