模版方法(Template Method)模式:属于类的行为模式,它的用意是定义一个操作中的算法的骨架,将一些操作延迟到子类中。使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
模版方法模式的类图如下:
模版方法模式有两个角色:
1、抽象模版(Abstract Template)角色:定义了一个或多个抽象操作,同时定义了一个模版方法,它是一个具体的方法,作为抽象模版的骨架。实际的逻辑在抽象操作中,推迟到子类实现。
2、实现模版(Concrete Template)角色:实现了抽象模版中一个或多个抽象方法。
这里举个模拟计算器的例子来说模版方法模式,我们知道计算器计算的时候首先获取操作数1,然后获取操作数2,再进行加减乘除运算,最后显示在屏幕上,对于计算器来说不管是计算加减乘除那一种,都是要获取两个操作数,计算后再显示。可以建立以下类图模型:
package templateMethod; /** * *作者:alaric *时间:2013-8-9下午8:15:18 *描述:抽象模版角色 */ public abstract class AbstractClass { /** * *作者:alaric *时间:2013-8-9下午8:17:00 *描述:模版方法 */ public final void templateMethod(){ int m = getNum1(); int n = getNum2(); int s = operate(m ,n); show(s); } /** * *作者:alaric *时间:2013-8-9下午8:21:49 *描述:获取第一个操作数 */ private int getNum1(){ return 8; } /** * *作者:alaric *时间:2013-8-9下午8:21:49 *描述:获取第二个操作数 */ private int getNum2(){ return 2; } /** * *作者:alaric *时间:2013-8-9下午8:19:53 *描述:算法 */ public abstract int operate(int m,int n); /** * *作者:alaric *时间:2013-8-9下午8:20:59 *描述:显示 */ public void show(int s){ System.out.println("结果是:"+ s); } }
package templateMethod; /** * *作者:alaric *时间:2013-8-9下午8:57:06 *描述:加法 */ public class AddClass extends AbstractClass{ @Override public int operate(int m,int n) { return m+n; } }
package templateMethod; /** * *作者:alaric *时间:2013-8-9下午8:57:24 *描述:减法 */ public class SubClass extends AbstractClass{ @Override public int operate(int m,int n) { return m-n; } }
package templateMethod; /** * *作者:alaric *时间:2013-8-9下午8:57:38 *描述:乘法 */ public class MultiClass extends AbstractClass{ @Override public int operate(int m,int n) { return m*n; } }
package templateMethod; /** * *作者:alaric *时间:2013-8-9下午8:57:50 *描述:除法 */ public class DivClass extends AbstractClass{ @Override public int operate(int m,int n) { return m/n; } }
package templateMethod; /** * *作者:alaric *时间:2013-8-9下午8:14:34 *描述:测试类 */ public class Client { /** *作者:alaric *时间:2013-8-9下午8:14:28 *描述: */ public static void main(String[] args) { //加 AbstractClass c1 = new AddClass(); c1.templateMethod(); //减 AbstractClass c4 = new SubClass(); c4.templateMethod(); //乘 AbstractClass c2 = new MultiClass(); c2.templateMethod(); //除 AbstractClass c3 = new DivClass(); c3.templateMethod(); } }运行结果:
结果是:10
结果是:6
结果是:16
结果是:4
整个计算过程(取操作数,计算,显示)使用了模版方法模式,模版方法规定程序实现步骤,并且在子类中无法改变,而子类必须实现abstract修饰的抽象方法,不同的实现类可以有不同的实现,这也是模版方法模式的用意。如果你了解策略模式,你会发现在每条算法的封装上很像策略模式,而又不是策略模式,策略模式是利用委派的方法提供不同的算法行为,而模版方法是利用继承来提供不同的算法行为的。
设计模式系列目录:
相关推荐
以上只是部分Java设计模式的介绍,实际的“DesignPatterns”压缩包可能包含了这些模式的源代码实现,通过阅读和学习这些代码,开发者可以更好地理解和运用设计模式,提升代码质量。同时,结合博主提供的博客链接,...
本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...
在Java编程中,设计模式是一种解决常见问题的模板或最佳实践,它可以帮助开发者编写更加灵活、可维护和可扩展的代码。代理设计模式是其中的一种,它的主要作用是在不修改原有对象的基础上,为对象添加额外的功能或者...
通过深入学习《设计模式——Java语言中的应用》,开发者能够更好地理解和应用这些模式,从而编写出更加高效、可扩展的Java程序。无论是初级开发者还是经验丰富的程序员,都应该不断探索和实践设计模式,以提升自己的...
### Java设计模式经典教程知识点概览 #### 一、设计模式概述 设计模式是一种软件设计方法,它为软件开发者提供了一种标准化的方式去解决常见的软件设计问题。设计模式的使用可以提高代码的可读性和可维护性,同时...
10.3 模板方法模式的应用 10.4 模板方法模式的扩展 10.5 最佳实践 第11章 建造者模式 11.1 变化是永恒的 11.2 建造者模式的定义 11.3 建造者模式的应用 11.4 建造者模式的扩展 11.5 最佳实践 第12章 代理模式 12.1 ...
总结来说,Java设计模式的学习是一条不断深化的过程,它从UML开始,到设计模式的具体分类和应用,再到软件设计原则的领悟,每一步都是提升个人技术能力的重要环节。通过不断的学习和实践,开发者能够成为一名更加...
根据提供的标题、描述以及部分内容,本文将深入探讨Java设计模式,并着重分析23种常见的设计模式,以帮助Java程序员更好地理解和应用这些模式。 ### Java设计模式概述 Java设计模式是面向对象软件设计的一种通用可...
《Java与模式》是闫宏大师的一部经典之作,它将古老的哲学智慧——道德经的智慧,巧妙地融入到现代编程语言Java的设计模式之中。这本书不仅深入浅出地讲解了23种经典的设计模式,还提供了丰富的实践案例,旨在帮助...
以下是关于JAVA设计模式中提及的四种模式——工厂模式、代理模式、迭代器模式以及责任链模式的详细说明。 1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当创建...
在编程世界中,Java设计模式是面向对象编程领域的一个重要概念,它为解决常见的软件设计问题提供了可重用的解决方案。对于新手来说,设计模式可能显得深奥难懂,但它们实际上是经验丰富的开发者用来提高代码质量、可...
### Java设计模式(1)——理解与应用 #### 一、设计模式概述 设计模式是在软件工程领域中,为了应对特定问题或情境而形成的最佳实践集合。这些模式可以帮助开发者更高效地解决常见问题,提高代码的可重用性和可...
Java面试题是每个Java开发者在求职过程中必须面对的挑战,涵盖范围广泛,从基础概念到高级特性和设计模式。这份终极列表包含115个Java面试题和答案,旨在帮助求职者全面准备,以期在面试中表现出色。以下是部分核心...
### JAVA设计模式总结之23种设计模式及六大原则 #### 一、设计模式之六大原则 ##### 总原则:开闭原则(Open Close Principle) 开闭原则是设计模式中最核心的原则之一,它强调的是软件实体(类、模块、函数等)...
本项目是运用Java设计模式实现的一款经典游戏——俄罗斯方块,其核心在于将游戏的各个部分模块化,通过巧妙的设计和组合,实现了游戏的稳定性和可扩展性。 首先,我们来看这款游戏的核心功能。俄罗斯方块的基本玩法...
9. **模板方法模式**:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 10. **策略模式**:定义一系列的算法,并将每一个算法封装起来,...
总结来说,模板方法模式是Java设计模式中的一种常见模式,用于定义算法的结构,并允许子类在不改变整体结构的情况下重定义某些步骤。在这个悍马模型的例子中,通过调整`run()`方法的实现位置,可以更好地体现模板...
设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板或蓝图。...通过阅读《设计模式——Java语言中的应用》这本书,你可以更深入地学习和掌握这些模式的细节及其在实际开发中的应用。