`

设计模式-模板方法模式

阅读更多

模板方法模式:类的行为模式。一个抽象类,将部分逻辑以具体方法以及具体构造的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。它包括轮廓和具体逻辑,轮廓即为模板方法,具体逻辑为基本方法。

模板方法:定义在抽象类中,把基本操作方法组合在一起形成一个总的行为,由子类不加修改地完全继承下来。一个抽象类 可以有多个模板方法,一个模板方法可以调用任意多个具体方法。

基本方法:分为抽象方法、具体方法、钩子方法;具体方法由抽象类声明并实现,有些能起到工厂方法的作用。钩子方法由抽象类声明并实现,而子类回加以扩展。通常抽象类给出的是一个空实现或默认实现。

角色:

      抽象模板角色:定义一个活多个抽象操作(基本操作),一边让子类实现;定义并实现一个模板方法。模板方法一般是一个具体方法,他给出了轮廓的骨架,而其中的逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。

      具体模板角色:实现父类所定义的一个或多个抽象方法,他们是一个轮廓的组成步骤;每个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法的不同实现,从而使得轮廓的实现各不相同。

先来个例子:

package cn.design.pattern.demo.templatemethod.demo.interesrate;

public abstract class Account {

	protected String accountNum;
	
	public Account() {
		accountNum = null;
	}
	
	public Account(String accountNum) {
		this.accountNum = accountNum;
	}
	
	/**
	 * 模板方法
	 * @return
	 */
	protected final double calculateRest() {
		double insertRate = doCalculateInterRate();
		String accountType = doCalculateAccountType();
		double amount = calculateAmount(accountType, accountNum);
		return amount * insertRate;
	}
	
	/**
	 * 两个基本方法, 由子类实现
	 * @return
	 */
	protected abstract String doCalculateAccountType();
	
	protected abstract double doCalculateInterRate();
	
	/**
	 * 基本方法,已经实现
	 * @param accountType
	 * @param accountNum
	 * @return
	 */
	protected final double calculateAmount(String accountType, String accountNum) {
		// 可能读取数据库数据
		return 12334D;
	}
}

package cn.design.pattern.demo.templatemethod.demo.interesrate;

public class MarketAccount extends Account {

	@Override
	protected String doCalculateAccountType() {
		return null;
	}

	@Override
	protected double doCalculateInterRate() {
		return 0;
	}

}

package cn.design.pattern.demo.templatemethod.demo.interesrate;

public class CDAccount extends Account {

	@Override
	protected String doCalculateAccountType() {
		return null;
	}

	@Override
	protected double doCalculateInterRate() {
		return 0;
	}

}

 在我们之前接触到得HttpServlet,正是用了模板方法模式:service方法是模板方法,其中调用doXXX方法,而doXXX方法则由子类实现具体业务。

1
3
分享到:
评论

相关推荐

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

    ### 设计模式之模板方法模式解析 #### 一、引言 在软件开发过程中,我们经常面临这样的场景:有一些步骤是固定的,而某些步骤则可能因具体实现而异。为了解决这类问题,设计模式中引入了一种叫做“模板方法模式”的...

    设计模式-模板方法模式(讲解及其实现代码)

    模板方法模式是一种行为设计模式,它允许在定义行为框架的同时,延迟部分具体步骤到子类中实现。这种模式主要用于在父类中定义算法的骨架,而将一些步骤的实现细节留给子类去完成,从而使得不同的子类可以重用相同的...

    11.设计模式-模板方法模式1

    模板方法模式(Template Method Pattern)是一种行为设计模式,它允许在父类中定义算法的框架,然后由子类提供具体的实现。这种模式的核心是“模板方法”,它在父类中定义了一个操作的步骤顺序,并将某些步骤声明为...

    JAVA-设计模式-行为型模式-模板方法模式

    JAVA-设计模式-行为型模式-模板方法模式

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

    模板方法模式是设计模式中行为型模式的一种,它在软件工程中扮演着非常重要的角色,尤其是在Java编程中。模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它允许子类不改变一个算法的结构即可重...

    c++设计模式-行为型模式-模板方法模式

    c++设计模式-行为型模式-模板方法模式;qt工程;c++简单源码; 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重...

    JinbaoWeb#Hexo#Head-First软件设计模式-模板方法模式1

    (1) 系统根据账号和密码验证用户信息,如果用户信息错误,系统显示出错提示 (2) 如果用户信息正确,则根据用户类型的不同使用不同的利息计算公式计算利息(如活期

    java设计模式-模板模式

    模板模式是一种行为设计模式,它在面向对象编程中扮演着重要的角色。此模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。这样,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤...

    C++设计模式--基于Qt4开源跨平台开发框架

    设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板,能够提升代码的可读性、可维护性和复用性。而Qt4作为一个强大的开源库,提供了丰富的功能,使得开发者能够在多个操作系统上构建...

    设计模式之模板方法模式

    模板方法模式是面向对象设计模式中的行为模式之一,它在Java等面向对象编程语言中有着广泛的应用。模板方法模式的主要思想是在一个抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现。这样,子类可以重写...

    c#代码介绍23种设计模式-14模板方法模式(附代码)

    在设计模式中,模板方法模式中模板和生活中模板概念非常类似,下面让我们就详细介绍模板方法的定义,大家可以根据生活中模板的概念来理解模板方法的定义 1. 模板方法模式的定义 模板方法模式——在一个抽象类中定义...

    C# 设计模式系列教程-模板方法模式

    1. 概述  定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个... 3.2 模板方法模式代码实现 /// /// 抽象类 /// public abstract class AbstractClass { // 一些抽象行为

    设计模式-Java语言中的应用

    设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...

    DesignPattern_Template:设计模式-模板方法模式

    模板方法模式作为设计模式之一,是一种行为模式,它在面向对象设计中扮演着关键角色。该模式允许我们在抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中。这种做法使得子类可以不改变算法的结构即可重定义算法...

    java模式--模板模式实例代码

    模板模式是一种行为设计模式,它使你能在代码中定义一个操作的不同步骤,并让子类决定这些步骤如何执行。模板模式提供了创建算法结构的通用接口,而具体的实现则由子类来完成。这种模式允许在不修改原有代码的情况下...

    C++设计模式-基于QT4开源跨平台开发框架 源码

    C++设计模式是一种在软件开发中经过验证的解决常见问题的方法论,它为软件开发提供了标准的解决方案。在本资源中,"C++设计模式-基于QT4开源跨平台开发框架 源码",我们将重点探讨如何在C++编程语言中结合QT4框架来...

    java设计模式---诙谐易懂版

    例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template ...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。这些模式是由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位大师,通常被称为GoF(Gang of Four),在他们的经典著作...

Global site tag (gtag.js) - Google Analytics