行为模式之Template(模板模式)
2015-01-21 20:57
253 查看
模板模式定义一系列的操作流程,并将其中的一个或多个操作的实现延迟到子类之中.
我们以牛奶加工过程为例,当然对其做了简化,具体流程如下图:
首先,将加工过程定义成一个抽象类:
AbstractMilkProcess
handle()模板方法调用一系列的流程,其中milking()的实现延迟到子类实现
其次,创建一个基于人工挤奶的流程
ManualMilkProcess
ManualMilkProcess类实现具体的milking()操作
测试类:
运行结果:
当经济条件允许的情况下,有钱任性,不需要手工挤奶,采用机器挤奶
MachineMilkProcess
测试代码:
结果:
小结:
从上面例子中,可以看出只要引入新的实现方式(子类),模板方法所定义的代理不需要做任何改变,有效保证了扩展性,
当然也满足了设计原则中的开闭原则
我们以牛奶加工过程为例,当然对其做了简化,具体流程如下图:
首先,将加工过程定义成一个抽象类:
AbstractMilkProcess
package com.design; /**牛奶加工过程 * @author wobendiankun *2015-1-21 下午08:01:57 */ public abstract class AbstractMilkProcess { /** *挤奶 */ protected abstract void milking(); /** * 杀菌 */ protected void sterilize(){ System.out.println("杀菌....."); } /** * 打包 */ protected void packaging(){ System.out.println("打包....."); } /** * 模版方法 */ public void handle(){ milking(); sterilize(); packaging(); } }
handle()模板方法调用一系列的流程,其中milking()的实现延迟到子类实现
其次,创建一个基于人工挤奶的流程
ManualMilkProcess
package com.design; /**手工处理 * @author wobendiankun *2015-1-21 下午08:07:11 */ public class ManualMilkProcess extends AbstractMilkProcess{ @Override public void milking() { System.out.println("手工挤奶..."); } }
ManualMilkProcess类实现具体的milking()操作
测试类:
package com.design; /** * @author wobendiankun *2015-1-21 下午07:48:25 */ public class TemplateTest { public static void main(String[] args) { AbstractMilkProcess process = new ManualMilkProcess(); process.handle(); } }
运行结果:
手工挤奶... 杀菌..... 打包.....
当经济条件允许的情况下,有钱任性,不需要手工挤奶,采用机器挤奶
MachineMilkProcess
package com.design; /**机器处理 * @author wobendiankun *2015-1-21 下午08:40:51 */ public class MachineMilkProcess extends AbstractMilkProcess { /* (non-Javadoc) * @see com.design.AbstractMilkProcess#milking() */ @Override protected void milking() { System.out.println("机器挤奶..."); } }
测试代码:
package com.design; /** * @author wobendiankun *2015-1-21 下午07:48:25 */ public class TemplateTest { public static void main(String[] args) { // process = new ManualMilkProcess(); AbstractMilkProcess process = new MachineMilkProcess(); process.handle(); } }
结果:
机器挤奶... 杀菌..... 打包.....
小结:
从上面例子中,可以看出只要引入新的实现方式(子类),模板方法所定义的代理不需要做任何改变,有效保证了扩展性,
当然也满足了设计原则中的开闭原则
相关文章推荐
- java23中设计模式——行为模式——Template(模板方法)
- [设计模式](十):策略模式(Strategy)与模板模式(Template)详解及二者间区别介绍(两种父子类行为模式)
- 行为模式之模板方法模式(Template Pattern)C++实现
- 设计模式-行为设计模式:模板方法设计模式 TemplateMethod
- Java设计模式(16)——行为模式之模板方法模式(Template)
- 行为模式之十---TemplateMethod
- 设计模式19:Template Method Pattern (模板方法模式)
- 行为模式 - 模板方法(Template Method)
- 设计模式 - Template Method Pattern(模板方法模式)
- java抽象类与行为模式之Template
- 行为模式之Template
- 设计模式之模板模式(Template pattern)C#源代码
- 模板方法模式-Template Method Patern(转-吕震宇)
- 结构模式: template 模板模式
- 模板方法模式(Template Mothed Pattern)
- Template Method Design Pattern - 模板方法设计模式
- 模板模式(Template Pattern)
- 模板模式(template)解析例子
- [转]C++ Template学习笔记之函数模板(5)——模板编译模式
- 递归模板模式--The curiously recurring template pattern