java设计模式之一:模板模式

原创 2013年12月01日 22:25:34

一句话:逻辑相同,具体实现不同

1. 使用场景

a. 多个子类有公用的方法,并且逻辑基本相同;

b. 重构,相同的代码抽取到父类

2. 优点

a. 不变的算法封装到父类,变的部分放在子类,扩展方便;

b. 提取公共部分,便于维护;

c. 具体逻辑由父类实现,子类实现具体方法;

3. 缺点

a. 子类的行为对父类产生影响,子类的执行结果影响父类的结果;

b. 对于新手来说,不易阅读;

4. 具体应用

应用非常广泛,如:servlet,struts,mybatis,spring

5. 代码示例

/**
 * 模板模式示例,抽象模板类
 * @author Mid Lee
 * @date 2013-12-01
 */
public abstract class ModelTemplete {

	//基本方法尽量为protected类型,符合迪米特法则
	protected abstract void method1();
	
	protected abstract void method2();
	
	//防止恶意操作,一般模板方法加上final关键字,不允许覆写
	final public void templateMethod(){
		this.method1();
		this.method2();
	}
	
}
/**
 * 具体模板类1
 */
public class ModelTempleteConcrete1 extends ModelTemplete {

	@Override
	protected void method1() {
		System.out.println("Concrete1 method1...");
	}

	@Override
	protected void method2() {
		System.out.println("Concrete1 method2...");
	}

}
/**
 * 具体模板类2
 */
public class ModelTempleteConcrete2 extends ModelTemplete {

	@Override
	protected void method1() {
		System.out.println("Concrete2 method1...");
	}

	@Override
	protected void method2() {
		System.out.println("Concrete2 method2...");
	}

}
/**
 * 模板模式测试类
 * 运行结果:
 *     Concrete1 method1...
 *     Concrete1 method2...
 *     Concrete2 method1...
 *     Concrete2 method2...
 * @author Mid Lee
 * @date 2013-12-01
 */
public class ModelTempleteTest {

	public static void main(String[] args) {
		ModelTemplete a = new ModelTempleteConcrete1();
		ModelTemplete b = new ModelTempleteConcrete2();
		//调用模板方法
		a.templateMethod();
		b.templateMethod();
	}
	
}

参考资料:

1. 秦小波《设计模式之禅》机械工业社 2010.1

【java设计模式】之 模板方法(Template Method)模式

1. 模板方法的一个实例         这一节主要来学习一下设计模式中的模板方法模式。我们先来看一个例子:假如现在老板让你做一个汽车的模型,要求只要完成基本功能即可,不考虑扩展性,那你会怎么做呢?...
  • eson_15
  • eson_15
  • 2016年05月06日 08:57
  • 3840

java设计模式-模板方法模式

模板方法模式概念  模板方法模式属于行为型模式,它定义一个操作中的算法的骨架,而将一些步骤推迟到子类当中实现。父类抽取并实现的是公共方法,对于可变方法,父类做的只是定义了可变行为的接口,具体实现留给子...
  • xia744510124
  • xia744510124
  • 2016年08月31日 12:20
  • 1221

从模板方法模式深入理解Java抽象类

阿里面试的时候被问到:接口不能实现,必须由抽象类实现的典型场景?这不就是典型的模板方法模式嘛!钩子方法和具体方法的存在使抽象类与接口具有了最主要的差异: 接口主要体现的是一种规范,实现接口的类只能去实...
  • zhangliangzi
  • zhangliangzi
  • 2016年05月22日 17:12
  • 1666

java事务 - 模板设计模式

  • 2014年09月13日 12:48
  • 1.07MB
  • 下载

Java模板设计模式

  • 2014年08月13日 21:47
  • 2KB
  • 下载

Java设计模式透析之 —— 模板方法(Template Method)

今天你还是像往常一样来上班,一如既往地开始了你的编程工作。 项目经理告诉你,今天想在服务器端增加一个新功能,希望写一个方法,能对Book对象进行处理,将Book对象的所有字段以XML格式进行包装,这样...
  • sinyu890807
  • sinyu890807
  • 2013年03月31日 21:33
  • 20077

java的模板方法设计模式

统计不同操作的耗时时间模板操作。 OperateTimeTemplate. 统计String连接10000此时和int相加10000次的时间差 -------------------...
  • yangying496875002
  • yangying496875002
  • 2017年06月15日 22:11
  • 109

Java设计模式之模板方法

模板方法 package com.hycz.design.pattern.template; /** * Created with IntelliJ IDEA. * User: shangke...
  • s464036801
  • s464036801
  • 2013年06月17日 11:42
  • 571

Java设计模式透析之 —— 模板方法(Template Method)

今天你还是像往常一样来上班,一如既往地开始了你的编程工作。 项目经理告诉你,今天想在服务器端增加一个新功能,希望写一个方法,能对Book对象进行处理,将Book对象的所有字段以XML格式进行包装...
  • lxq_xsyu
  • lxq_xsyu
  • 2013年08月05日 08:16
  • 1526

Java设计模式透析之 —— 模板方法(Template Method)

今天你还是像往常一样来上班,一如既往地开始了你的编程工作。 项目经理告诉你,今天想在服务器端增加一个新功能,希望写一个方法,能对Book对象进行处理,将Book对象的所有字段以XML格式进行包装...
  • wuchuang127
  • wuchuang127
  • 2015年04月14日 10:13
  • 376
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java设计模式之一:模板模式
举报原因:
原因补充:

(最多只允许输入30个字)