设计模式7:模板方法模式

Posted 一个后端狗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式7:模板方法模式相关的知识,希望对你有一定的参考价值。

有时候,我们需要定义某个方法,这个方法在高层次来看是相同的,但是里面几个具体步骤有可能有些不同。

一种实现方法是父类定义一个虚方法,由多个子类具体实现。但是这样做的话,不变的和可变的行为在子类中是混合在一起的,造成代码的大量重复。

这时候我们需要使用模板方法模式。

模板方法模式:定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构,即可重定义算法的某些特定步骤。

这个模式通过将不变的行为搬移到父类,去除子类中的重复代码。

UML图:

在父类中,templateMethod是模板方法,需要调用primitiveMethod1和primitiveMethod2两个虚方法。

子类中对这两个虚方法给出了具体实现。

代码:

AbstractClass及其子类:

public abstract class AbstractClass {
	
	public void templateMethod() {
		primitiveMethod1();
		primitiveMethod2();
		System.out.println("templateMethod");
	}

	protected abstract void primitiveMethod1();

	protected abstract void primitiveMethod2();
}

public class ConcreteClass1 extends AbstractClass {

	@Override
	protected void primitiveMethod1() {
		System.out.println("ConcreteClass1.primitiveMethod1");
	}

	@Override
	protected void primitiveMethod2() {
		System.out.println("ConcreteClass1.primitiveMethod2");
	}

}
public class ConcreteClass2 extends AbstractClass {

	@Override
	protected void primitiveMethod1() {
		System.out.println("ConcreteClass2.primitiveMethod1");
	}

	@Override
	protected void primitiveMethod2() {
		System.out.println("ConcreteClass2.primitiveMethod2");
	}

}

Demo:

public class TemplateDemo {
	
	public static void main(String[] args) {
		AbstractClass class1 = new ConcreteClass1();
		class1.templateMethod();
		AbstractClass class2 = new ConcreteClass2();
		class2.templateMethod();
	}
	
}

  

以上是关于设计模式7:模板方法模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之模板方法模式

大话设计模式读书笔记--7.模板方法模式

java设计模式7.策略模式模板方法模式观察者模式

Head First 设计模式 --8 模板方法模式

设计模式模板方法模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

模板方法设计模式