设计模式之禅学习之模板方法设计模式
1、模板方法设计模式相当简单,就是把相同的方法提取到抽象类中,平时也会经常用到,只是不知道这就是模板方法设计模式罢了
2、模板方法类:
package com.wang.templatePattern; /** * 抽象模板类 * @author HeJW * */ public abstract class AbstractClass { //基本方法 protected abstract void method1(); protected abstract void method2(); protected abstract void method3(); //模板方法 final public void templateMethod(){ //调用基本方法,完成业务逻辑 this.method1(); this.method2(); this.method3(); } }
3、具体的模板,模板可以有多个,一下是一个例子:
package com.wang.templatePattern; /** * 具体模板类1 * @author HeJW * */ public class ConcreteClass1 extends AbstractClass { @Override protected void method1() { System.out.println("1 1"); } @Override protected void method2() { System.out.println("1 2"); } @Override protected void method3() { System.out.println("1 3"); } }
另一个模板:
package com.wang.templatePattern; /** * 具体模板类2 * @author HeJW * */ public class ConcreteClass2 extends AbstractClass { @Override protected void method1() { System.out.println("2 1"); } @Override protected void method2() { System.out.println("2 2"); } @Override protected void method3() { System.out.println("2 3"); } }
4、测试类
package com.wang.templatePattern; public class App { public static void main(String[] args) { AbstractClass class1 = new ConcreteClass1(); class1.templateMethod(); AbstractClass class2 = new ConcreteClass2(); class2.templateMethod(); } }
5、模板方法设计模式的扩展,在抽象模板中定义的基本方法,在具体模板中,不一定都能够用到,还有可能用不用这个基本方法需要客户端决定,这时可以在抽象模板中定义钩子函数:
一个扩展的抽象模板:
package com.wang.templatePattern.develop; /** * 抽象模板类 * @author HeJW * */ public abstract class AbstractClass { //基本方法 protected abstract void method1(); protected abstract void method2(); protected abstract void method3(); //模板方法 final public void templateMethod(){ //调用基本方法,完成业务逻辑 this.method1(); //根据条件判断这个方法执行不执行 if ( this.condition() ) { this.method2(); } this.method3(); } //钩子函数 protected boolean condition() { return true; } }
在类中可以看到,有一个钩子函数,该钩子函数能够决定基本方法是否执行,
以下是一个由客户端决定执不执行基本方法的具体模板类:
package com.wang.templatePattern.develop; /** * 具体模板类1 * @author HeJW * */ public class ConcreteClass1 extends AbstractClass { private boolean condition = true; //判断条件由客户端决定,默认执行 public void setCondition( boolean condition ){ this.condition = condition; } @Override protected boolean condition() { return this.condition; } @Override protected void method1() { System.out.println("1 1"); } @Override protected void method2() { System.out.println("1 2"); } @Override protected void method3() { System.out.println("1 3"); } }
这样就可以在客户端中决定基本方法是否执行了。
一个测试类:
package com.wang.templatePattern.develop; public class App { public static void main(String[] args) { ConcreteClass1 class1 = new ConcreteClass1(); //不执行 class1.setCondition(false); class1.templateMethod(); } }
相关推荐
模板方法模式是一种行为设计模式,它允许在定义行为框架的同时,延迟部分具体步骤到子类中实现。这种模式主要用于在父类中定义算法的骨架,而将一些步骤的实现细节留给子类去完成,从而使得不同的子类可以重用相同的...
模板方法模式是一种设计模式,属于行为设计模式,它在面向对象设计中被广泛使用,用于定义算法的骨架,而将一些步骤延迟到子类中。这样,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定...
下面我们将逐一探讨这些文件可能涵盖的设计模式及其应用: 1. MarvelousWorks.PracticalPattern_34 可能涉及“工厂模式”。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,通过抽象工厂类,使得...
### C++设计模式课件3_Template Method_模板方法 #### 模板方法设计模式解析 模板方法模式(Template Method Pattern)是一种行为型设计模式,它允许我们定义算法的骨架,并将部分步骤推迟到子类中实现。这种模式...
设计模式、框架及其实践...总而言之,《设计模式、框架及其实践》是一本深入浅出的书籍,旨在帮助读者通过学习和理解设计模式,提升软件设计水平,从而能够更好地应对复杂系统的挑战,构建可扩展、可维护的高质量软件。
"软件设计模式及其使用" 软件设计模式是一种经验总结,它描述了在特定环境下解决一类问题的最佳实践。设计模式不仅提供了问题解决方案,还为我们提供了一种复用设计的方法。通过使用设计模式,我们可以更好地组织和...
这篇资料"java23种设计模式及其代码"涵盖了这些模式的详细解释和实际代码实现,对于学习和理解设计模式具有极大的帮助。 1. 创建型模式(5种): - 单例模式:保证一个类只有一个实例,并提供一个全局访问点。 - ...
### MFC视图类的继承、模板方法模式及其在数据库应用系统中的应用 #### 引言 在使用Microsoft Foundation Classes (MFC)进行Windows应用程序开发的过程中,开发者常常面临的一个挑战是如何有效地管理和组织复杂的...
以下是一些常见的设计模式及其在实际编程中的应用: 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在多线程环境中,单例模式能够有效控制资源的共享,如数据库连接池。 2. **工厂模式**:定义一个...
JUnit是Java编程语言中最常用的单元测试框架之一,它在软件开发过程中起着至关重要的作用,确保代码的质量和可维护性...对于任何Java开发者来说,理解和掌握JUnit框架及其设计模式是提高工作效率和代码质量的重要一环。
下面将详细讨论几种常见的设计模式及其在扩展性方面的应用。 1. **工厂模式**:这是最简单的创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建一个工厂类,该类负责创建对象,而客户端代码...
《设计模式--基于C#的工程化实现及扩展》是一本深入探讨软件设计模式的书籍,作者王翔通过C#语言来阐述各种设计模式的原理、应用及其在实际工程中的扩展。这本书对于C#开发者来说,是提升软件设计能力的重要参考资料...
该书不仅包含了面向对象程序设计的基础知识,还详细探讨了设计模式的概念及其应用价值,同时介绍了多个重要的软件设计原则。 #### 面向对象程序设计基础 面向对象编程(Object-Oriented Programming, OOP)是一种...
3. **灵活性**:设计模式鼓励开发者采用更灵活的方式组织代码,便于后期扩展和维护。 ### GOF设计模式 1. **种类**:共有23种设计模式被记录在著名的《设计模式:可复用面向对象软件的基础》一书中,这些模式由...
总之,设计模式和设计原则是软件开发中不可或缺的工具,它们有助于提高代码的可读性、可维护性和可扩展性,是每一位IT从业者应当掌握的基本技能。通过阅读源码和相关文档,我们可以深入了解如何在实际项目中运用这些...
3. 行为型设计模式:如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、责任链模式(Chain of Responsibility)、备忘录模式...
### Java设计模式经典教程...通过深入理解这些设计模式及其背后的原理,无论是新手还是有经验的开发者都可以从中获益。希望本文能够帮助读者更好地理解设计模式的概念、分类及应用场景,为进一步学习打下坚实的基础。
再者,行为型设计模式关注对象之间的职责分配和通信,如命令模式、解释器模式、迭代器模式、访问者模式、备忘录模式、状态模式、策略模式、模板方法模式和责任链模式。命令模式封装了请求作为对象,使得可以使用不同...