模版方法模式定义:定义一个操作中的算法的骨架,而将一些步骤延伸到子类中,模版方法可以使子类可以不改变一个算法的结构即可以重定义该算法的某些特定步骤。
模版方法模式的特点:把不变的行为搬到超类,去除子类中重复的代码来体现他的优势。
下面实现一个模版方法模式的Demo。
抽象类
package templatemethod;
/**
* 模版方法抽象类,定义算法的结构
*
* @author CYL
*
*/
public abstract class AbstractClass {
// 模板方法
public final void templateMethod() {
primitiveOperation1();
primitiveOperation2();
hook();
if (isXXX()) {
concreteOperation();
}
}
// 原语操作1
protected abstract void primitiveOperation1();
// 原语操作2
protected abstract void primitiveOperation2();
// 钩子操作 “默认不做事的方法”
protected void hook() {
}
protected boolean isXXX() {
return true;
}
// 实现方法
private void concreteOperation() {
// 这里是实现
System.out.println("AbstractClass -- concreteOperation");
}
}
具体算法实现类
package templatemethod;
/**
* 具体的实现类,重写算法结构中的部分方法
*
* @author CYL
*
*/
public class ConcreteClass extends AbstractClass {
@Override
protected void primitiveOperation1() {
System.out.println("------ConcreteClass primitiveOperation1");
}
@Override
protected void primitiveOperation2() {
System.out.println("------ConcreteClass primitiveOperation2");
}
@Override
protected boolean isXXX() {
return false;
}
}
测试类
package templatemethod;
public class Test {
public static void main(String[] args) {
new ConcreteClass().templateMethod();
}
}
输出结果:
------ConcreteClass primitiveOperation1
------ConcreteClass primitiveOperation2