JAVA设计模式(17):行为型-模板方法模式(Template Method)

场景

  • 客户到银行办理业务:
  • 取号排队
  • 办理具体现金/转账/企业/个人/理财业务
  • 给银行工作人员评分

核心:

处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定。因此,我们采用工厂方法模式,,将这个节点的代码实现转移给子类完成。

即:处理步骤父类中定义好,具体实现延迟到子类中定义。

概述

模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。

比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结构即可重定义算法的某些特定步骤。

模式中的角色

抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。

具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。

public abstract class Bank {
	public void takeNumber(){
		System.out.println("取号排队");
	}
	/* 办理具体的业务*/
	public abstract void transact();

	public void evaluate(){
		System.out.println("反馈评分");
	}

	public final void process(){
		this.takeNumber();
		this.transact();
		this.evaluate();
	}
}

public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Bank bank = new Bank(){
			@Override
			public void transact() {
				// TODO Auto-generated method stub
				System.out.println("我要取钱");
			}
		};
		bank.process();
	}

}

什么时候用到模板方法模式:

实现一个算法时,整体步骤很固定。但是,某些部分易变,易变部分可以抽象出来,供子类实现。

开发中常见的场景:

非常频繁。各个框架、类库中都有它的影子。比如常见的有:

  • 数据库访问的封装
  • junit单元测试
  • servlet中关于doGet/doPost方法调用
  • hibernate中模板程序
  • spring中JDBCTemplate、HibernateTemplate等
时间: 2024-10-10 16:46:56

JAVA设计模式(17):行为型-模板方法模式(Template Method)的相关文章

[设计模式]<10>. C++与模板方法模式(template method pattern)

作者:默默的EEer 原文地址:http://www.cnblogs.com/hebaichuanyeah/p/6092152.html 曾经在Qt中写过这样个需求,需要在程序所有的界面中添加一个自定义的事件.该事件由一个线程触发. 在每一个界面对象里面都单独添加一个事件绑定,确实是麻烦. 于是,我写了一个事件的父类接口,在事件中把该线程和一个事件过滤器函数绑定,同时在事件过滤器判断是否触发事件,然后调用一个事件响应函数,该事件响应函数是一个纯虚函数,实际上在子类中实现.并在把界面类继承自这个父

设计模式之模板方法模式(Template Method)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

设计模式 - 模板方法模式(template method pattern) JFrame 详解

模板方法模式(template method pattern) JFrame 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考模板方法模式(template method pattern): http://blog.csdn.net/caroline_wendy/article/details/32159455 模板方法模式(template method pattern), Java的JFrame使用模板方法模式, paint()是可以覆盖的方法,

设计模式 - 模板方法模式(template method pattern) Applet 详解

模板方法模式(template method pattern) Applet 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考模板方法模式(template method pattern): http://blog.csdn.net/caroline_wendy/article/details/32159455 模板方法模式(template method pattern), applet就是一个能够在网页上面执行的小程序, applet有很多钩子(

设计模式 - 模板方法模式(template method pattern) 排序(sort) 详解

模板方法模式(template method pattern) 排序(sort) 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考模板方法模式(template method pattern): http://blog.csdn.net/caroline_wendy/article/details/32159455 模板方法模式的一个主要的应用是排序(sort)算法. 对象的排列方式并不是完全相同, 所以需要排序(sort)算法compareTo()

设计模式 - 模板方法模式(template method pattern) 详解

模板方法模式(template method pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy 模板方法模式(template method pattern): 在一个方法中定义一个算法的骨架, 而将一些步骤延迟到子类中. 模板方法使得子类可以在不改变算法结构的情况下, 重新定义算法中的某些步骤. 模板方法可以进行挂钩(hook), 钩子(hook)是一种被声明在抽象类中的方法, 但只有空的或者默认的实现. 钩子的存在, 可以让子类有能力

设计模式 - 模板方法模式(template method pattern) JFrame 具体解释

模板方法模式(template method pattern) JFrame 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考模板方法模式(template method pattern): http://blog.csdn.net/caroline_wendy/article/details/32159455 模板方法模式(template method pattern), Java的JFrame使用模板方法模式, paint()是能够覆盖的方

设计模式 - 模板方法模式(template method pattern) Applet 具体解释

模板方法模式(template method pattern) Applet 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考模板方法模式(template method pattern): http://blog.csdn.net/caroline_wendy/article/details/32159455 模板方法模式(template method pattern), applet就是一个可以在网页上面运行的小程序, applet有非常多

设计模式 - 模板方法模式(template method pattern) 排序(sort) 具体解释

模板方法模式(template method pattern) 排序(sort) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考模板方法模式(template method pattern): http://blog.csdn.net/caroline_wendy/article/details/32159455 模板方法模式的一个基本的应用是排序(sort)算法. 对象的排列方式并非全然同样, 所以须要排序(sort)算法compareTo(

Java设计模式菜鸟系列(十)模板方法模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39806973 模板方法模式(Template Method):在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以再不改变算法结构的情况下,重新定义算法中的某些步骤.简而言之:模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现. 一.uml建模: 二.代码实现: /** * 示例:模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现.