模板方法模式学习

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010741376/article/details/47044447 模板方法模式是类的行为模式。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010741376/article/details/47044447

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

模板方法模式中的方法

  模板方法中的方法可以分为两大类:模板方法和基本方法。

  模板方法

  一个模板方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。

  一个抽象类可以有任意多个模板方法,而不限于一个。每一个模板方法都可以调用任意多个具体方法。

  基本方法

  基本方法又可以分为三种:抽象方法(Abstract Method)、具体方法(Concrete Method)和钩子方法(Hook Method)。

  ●  抽象方法:一个抽象方法由抽象类声明,由具体子类实现。在Java语言里抽象方法以abstract关键字标示。

  ●  具体方法:一个具体方法由抽象类声明并实现,而子类并不实现或置换。

  ●  钩子方法:一个钩子方法由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。

  在上面的例子中,AbstractTemplate是一个抽象类,它带有三个方法。其中abstractMethod()是一个抽象方法,它由抽象类声明为抽象方法,并由子类实现;hookMethod()是一个钩子方法,它由抽象类声明并提供默认实现,并且由子类置换掉。concreteMethod()是一个具体方法,它由抽象类声明并实现。

  默认钩子方法

  一个钩子方法常常由抽象类给出一个空实现作为此方法的默认实现。这种空的钩子方法叫做“Do Nothing Hook”。显然,这种默认钩子方法在缺省适配模式里面已经见过了,一个缺省适配模式讲的是一个类为一个接口提供一个默认的空实现,从而使得缺省适配类的子类不必像实现接口那样必须给出所有方法的实现,因为通常一个具体类并不需要所有的方法。

  命名规则

  命名规则是设计师之间赖以沟通的管道之一,使用恰当的命名规则可以帮助不同设计师之间的沟通。

  钩子方法的名字应当以do开始,这是熟悉设计模式的Java开发人员的标准做法。在上面的例子中,钩子方法hookMethod()应当以do开头;在HttpServlet类中,也遵从这一命名规则,如doGet()、doPost()等方法。


抽象模板:

  

/**
 * 抽象模板
 * @author Administrator
 *
 */
public abstract class Account {
    
	public final double calculateInterest(){
	    	 double interestRate = doCalculateInterestRate();
	         String accountType = doCalculateAccountType();
	        double amount = calculateAmount(accountType);
	        return amount * interestRate;
	}
	/**
	 * 基本方法,子类实现
	 */
	protected abstract String doCalculateAccountType();
	
	/**
	 * 基本方法,子类实现
	 */
	protected abstract double doCalculateInterestRate();
	
	
	private double calculateAmount(String accountType){
        /**
         * 省略相关的业务逻辑
         */
        return 7243.00;
    }
	
}
具体模板类:
/**
 * 具体模板
 * @author Administrator
 *
 */
public class CDAccount extends Account{

	@Override
	protected String doCalculateAccountType() {
		 return "Certificate of Deposite";
	}

	@Override
	protected double doCalculateInterestRate() {
		 return 0.06;
	}
   
}

/**
 * 具体模板角色
 * @author Administrator
 *
 */
public class MoneyMarketAccount extends Account{

	@Override
	protected String doCalculateAccountType() {
		  return "Money Market";
	}

	@Override
	protected double doCalculateInterestRate() {
		return 0.045;
	}
   
}
测试:
public class Client {
   public static void main(String[] args) {
	  Account account=new MoneyMarketAccount();
	   System.out.println("MoneyMarkerAccount:" + account.calculateInterest());
	   
	   account = new CDAccount();
       System.out.println("CDAccount:" + account.calculateInterest());
	   
    }
}


相关文章
|
设计模式 算法 Java
设计模式系列教程(08) - 模板方法
设计模式系列教程(08) - 模板方法
46 0
|
6月前
|
设计模式 存储 算法
【设计模式】模板方法模式
【设计模式】模板方法模式
|
6月前
|
设计模式 算法
设计模式-模板方法模式
设计模式-模板方法模式
48 1
|
设计模式 算法 程序员
设计模式~~~模板方法模式
设计模式~~~模板方法模式
38 0
|
设计模式 算法
设计模式——模板方法模式
设计模式——模板方法模式
90 0
|
设计模式 算法
设计模式 - 模板方法模式
设计模式 - 模板方法模式
|
设计模式 开发框架 算法
设计模式之模板方法模式
设计模式之模板方法模式
92 0
|
设计模式 消息中间件 算法
一起来学设计模式之模板方法模式
前言 目前正在出一个设计模式专题系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~ 本节给大家讲一下设计模式中的模板方法模式,并结合实际业务场景给大家讲解如何使用~ 本专题的所有案例代码主要以Java语言为主, 好了, 废话不多说直接开整吧~ 模板方法模式 模版方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个操作中算法的骨架(通常是一个抽象类),而将一些步骤延迟到子类中实现,使得子类在不改变算法结构的情况下,可以重新定义算法的某些步骤。 在模版方法模式中,定义了一个抽象类(AbstractClass),其中包含一个模版方法(templateMeth
|
设计模式 存储 算法
《设计模式》模板方法模式
《设计模式》模板方法模式
《设计模式》模板方法模式
|
设计模式 算法 搜索推荐
浅析设计模式4——模板方法模式
我们在进行软件开发时要想实现可维护、可扩展,就需要尽量复用代码,并且降低代码的耦合度。设计模式就是一种可以提高代码可复用性、可维护性、可扩展性以及可读性的解决方案。大家熟知的23种设计模式,可以分为创建型模式、结构型模式和行为型模式三大类。本专题着眼于实际开发过程中常用的几种设计模式,从理论和实战两个角度进行讨论和分享,力求逻辑清晰、表述简洁,帮助大家在项目中合理运用设计模式,保障代码的可靠性。 本文为此系列第四篇文章,前三篇见—— 第一篇:浅析设计模式1 —— 工厂模式 第二篇:浅析设计模式2 —— 策略模式 第三篇:浅析设计模式3 —— 装饰者模式
233 0
浅析设计模式4——模板方法模式