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

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

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

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

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

结果:

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

小结:

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

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

时间: 2024-10-05 04:10:08

行为模式之Template(模板模式)的相关文章

设计模式之——Template模板模式

Template模式又叫模板模式,是在父类中定义处理流程的框架,在子类中实现具体处理逻辑的模式.当父类的模板方法被调用时程序行为也会不同,但是,不论子类的具体实现如何,处理的流程都会按照父类中所定义的那样进行. 示例程序: 将一段字符串和字符循环显示五次的程序: AbstractDisplay 父类抽象的模板,里面定义了处理流程,但是没有具体把实现写出来 package site.wangxin520.gof.template; /** * 模板模式的模板,使用的是抽象类和抽象方法. * 在此模

《JAVA与模式》之模板模式(转载)

模板方法在servlet中的应用:http://www.cnblogs.com/java-my-life/archive/2012/05/14/2495235.html 原文出处:http://blog.csdn.net/zhengzhb/article/details/7405608   定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤. 类型:行为类模式 类图: 事实上,模版方法是编程中一个经常用到的模式.先来看一个例子,

跟我一起透彻理解template模板模式

#include <iostream> using namespace std; //template模式. class Base { public: void DealWhat() { this->Printf1(); this->Printf2(); } protected: virtual void Printf1() = 0; virtual void Printf2() = 0;//让子类实现算法的具体实现. }; class Son1 : public Base { p

Behavioral模式之template Method模式

1.意图 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 2.别名 暂无 3.动机 考虑一个提供Application和Document类的应用框架.Application类负责打开一个已有的以外部形式存储的文档,如一个文件.一旦一个文档中的信息重该文件中读出后,它就由一个Document对象表示. 4.适用性 以下情况使用Strategy模式: - 一次性实现一个算法的不变的部分并将可变的行为留

引入模板模式重构FtpClientUtil

在<ftp上传与下载>文章中,封装一个Ftp上传下载的工具类,主要代码如下: 上传: /**上传文件 * @param remoteFileName 远程文件名称 * @param locaFileName 本地文件名称 */ public void upload(String remoteFileName,String locaFileName){ FTPClient ftp=null; try { ftp = new FTPClient(); ftp.addProtocolCommandL

Android开发之模板模式初探

模板模式我认为在Android的开发中是最长用到的,基本是随处可见的,认识该模式,有助于我们对Android的源代码及框架有一个更深层次的认识.那什么是模板模式呢,模板模式就是定义一个基本框架,将当中的一些方法延迟到子类中运行实现.就比方我们去餐馆吃饭,基本步骤肯定为找到座位,点菜,上菜,吃饭,买单五个过程,当中点菜这个过程是可变的,我们点的菜可多可少,其它都是固定的,那么我们就能够写在一个固定的抽象类里形成一个基本框架,我们的子类继承该抽象类,对当中可变的方法进行复写. 以下我们就来看一个样例

模板模式和适配器模式

一.模板模式 1.模板模式(Template Method pattern):指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤.(属于行为型模式) 2.适用场景 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现 各子类中公共的行为被提取出来并集中到一个公共的父类中,从而避免代码重复 3.优点 提高代码的复用性 提高代码的扩展性 符合开闭原则 4.缺点 类数目的增加 间接地增加了系统实现的复杂度 继承关系自

图解设计模式-Template Method模式

父类中定义处理流程,子类中实现具体处理的模式称为Template Method模式 优点: 可以保持逻辑处理通用化(父类中定义处理流程) 父类与子类之间协作(子类实现父类的抽象方法) 父类与子类保持一致性(子类继承父类) 延伸: 子类可以使用父类的方法 可以通过子类增加方法以实现新功能 子类重写父类的方法可以改变程序的行为 角色划分: AbstractClass抽象类:负责实现模块方法,还负责声明在模板方法中所使用到的抽象方法,这些抽象方法由子类负责实现. ConcreteClass具体类:实现

Java设计模式之模板模式(Template )

前言: 最近学习了Glide开源图片缓存框架,在学习到通过使用ModelLoader自定义数据源的时候,Glide巧妙的使用了Java的模板模式来对外暴露处理不同的Url数据源,今天来学习总结一下模板模式. 模板模式(Template ): 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. 模式中的角色 抽象