`

模板方法设计模式及其扩展

阅读更多

设计模式之禅学习之模板方法设计模式

 

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
1
分享到:
评论

相关推荐

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

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

    设计模式模板方法模式PPT学习教案.pptx

    模板方法模式是一种设计模式,属于行为设计模式,它在面向对象设计中被广泛使用,用于定义算法的骨架,而将一些步骤延迟到子类中。这样,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定...

    设计模式_基于C#的工程化实现及扩展_源码

    下面我们将逐一探讨这些文件可能涵盖的设计模式及其应用: 1. MarvelousWorks.PracticalPattern_34 可能涉及“工厂模式”。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,通过抽象工厂类,使得...

    C++设计模式课件3_Template Method_模板方法.pdf

    ### C++设计模式课件3_Template Method_模板方法 #### 模板方法设计模式解析 模板方法模式(Template Method Pattern)是一种行为型设计模式,它允许我们定义算法的骨架,并将部分步骤推迟到子类中实现。这种模式...

    设计模式 框架 及其实践

    设计模式、框架及其实践...总而言之,《设计模式、框架及其实践》是一本深入浅出的书籍,旨在帮助读者通过学习和理解设计模式,提升软件设计水平,从而能够更好地应对复杂系统的挑战,构建可扩展、可维护的高质量软件。

    软件设计模式及其使用.pptx

    "软件设计模式及其使用" 软件设计模式是一种经验总结,它描述了在特定环境下解决一类问题的最佳实践。设计模式不仅提供了问题解决方案,还为我们提供了一种复用设计的方法。通过使用设计模式,我们可以更好地组织和...

    java23种设计模式及其代码

    这篇资料"java23种设计模式及其代码"涵盖了这些模式的详细解释和实际代码实现,对于学习和理解设计模式具有极大的帮助。 1. 创建型模式(5种): - 单例模式:保证一个类只有一个实例,并提供一个全局访问点。 - ...

    MFC视图类的继承_模板方法模式及其在数据库应用系统中的应用.pdf

    ### MFC视图类的继承、模板方法模式及其在数据库应用系统中的应用 #### 引言 在使用Microsoft Foundation Classes (MFC)进行Windows应用程序开发的过程中,开发者常常面临的一个挑战是如何有效地管理和组织复杂的...

    设计模式学习模板demo

    以下是一些常见的设计模式及其在实际编程中的应用: 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在多线程环境中,单例模式能够有效控制资源的共享,如数据库连接池。 2. **工厂模式**:定义一个...

    JUnit的框架设计及其使用的设计模式

    JUnit是Java编程语言中最常用的单元测试框架之一,它在软件开发过程中起着至关重要的作用,确保代码的质量和可维护性...对于任何Java开发者来说,理解和掌握JUnit框架及其设计模式是提高工作效率和代码质量的重要一环。

    扩展设计模式.zip

    下面将详细讨论几种常见的设计模式及其在扩展性方面的应用。 1. **工厂模式**:这是最简单的创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建一个工厂类,该类负责创建对象,而客户端代码...

    《设计模式--基于C#的工程化实现及扩展》.(王翔)(0520_).rar

    《设计模式--基于C#的工程化实现及扩展》是一本深入探讨软件设计模式的书籍,作者王翔通过C#语言来阐述各种设计模式的原理、应用及其在实际工程中的扩展。这本书对于C#开发者来说,是提升软件设计能力的重要参考资料...

    设计模式期末试题下载

    3. **灵活性**:设计模式鼓励开发者采用更灵活的方式组织代码,便于后期扩展和维护。 ### GOF设计模式 1. **种类**:共有23种设计模式被记录在著名的《设计模式:可复用面向对象软件的基础》一书中,这些模式由...

    设计模式源码及其下载地址

    总之,设计模式和设计原则是软件开发中不可或缺的工具,它们有助于提高代码的可读性、可维护性和可扩展性,是每一位IT从业者应当掌握的基本技能。通过阅读源码和相关文档,我们可以深入了解如何在实际项目中运用这些...

    软件工程 设计模式PDF 福州大学

    3. 行为型设计模式:如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、责任链模式(Chain of Responsibility)、备忘录模式...

    java设计模式经典教程

    ### Java设计模式经典教程...通过深入理解这些设计模式及其背后的原理,无论是新手还是有经验的开发者都可以从中获益。希望本文能够帮助读者更好地理解设计模式的概念、分类及应用场景,为进一步学习打下坚实的基础。

    设计模式23中模式及其代码

    再者,行为型设计模式关注对象之间的职责分配和通信,如命令模式、解释器模式、迭代器模式、访问者模式、备忘录模式、状态模式、策略模式、模板方法模式和责任链模式。命令模式封装了请求作为对象,使得可以使用不同...

    设计模式的杰作:深入设计模式

    该书不仅包含了面向对象程序设计的基础知识,还详细探讨了设计模式的概念及其应用价值,同时介绍了多个重要的软件设计原则。 #### 面向对象程序设计基础 面向对象编程(Object-Oriented Programming, OOP)是一种...

Global site tag (gtag.js) - Google Analytics