在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。Template Method提供了这种情况的一个实现框架。
Template Method模式是采用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节。
Strategy模式解决的是和Template Method模式类似的问题,但是Strategy模式是将逻辑(算法)封装到一个类中,并采取组合(委托)的方式解决这个问题。
解决这个问题可以采取两种模式来解决,一是Template模式,二是Strategy模式。本文给出的是Template Method模式。一个通用的Template Method模式的结构图为:
Demo如下:
public abstract class AbstractClass {
public void templateMethod() {
this.primitive1();
this.primitive2();
}
protected abstract void primitive1();
protected abstract void primitive2();
}
public class EntityClass1 () {
public class EntityClass1() {};
@override
protect void primitive1() {
System.out.println("EntityClass1.primitive1 called");
}
@override
protect void primitive2() {
System.out.println("EntityClass1.primitive2 called");
}
}
public class EntityClass2 () {
public class EntityClass2() {};
@override
protect void primitive1() {
System.out.println("EntityClass2.primitive1 called");
}
@override
protect void primitive2() {
System.out.println("EntityClass2.primitive2 called");
}
}