码迷,mamicode.com
首页 > 其他好文 > 详细

行为模式之Template(模板模式)

时间:2015-01-21 22:36:09      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

模板模式定义一系列的操作流程,并将其中的一个或多个操作的实现延迟到子类之中.

我们以牛奶加工过程为例,当然对其做了简化,具体流程如下图:

技术分享



首先,将加工过程定义成一个抽象类:

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();
	}
}

结果:

机器挤奶...
杀菌.....
打包.....


小结:

从上面例子中,可以看出只要引入新的实现方式(子类),模板方法所定义的代理不需要做任何改变,有效保证了扩展性,

当然也满足了设计原则中的开闭原则



行为模式之Template(模板模式)

标签:

原文地址:http://blog.csdn.net/wobendiankun/article/details/42976717

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!