首先来看一下类图
模板方法模式类图
原理就是,通过抽象的父类来控制子类的行为,具体的行为由子类定义
1,定义一个抽象的父类将公共执行部分抽取到父类中
public abstract class AbstractClass {
//基本方法
protected abstract void doSomething();
//基本方法
protected abstract void doAnything();
//模板方法
public final void templateMethod(){
/**
* 调用基本方法完成相关逻辑
*/
this.doSomething();
this.doAnything();
}
}
2,定义不同子类实现具体的执行方法
public class ConcreteClass1 extends AbstractClass{
@Override
protected void doSomething() {
//业务逻辑处理
}
@Override
protected void doAnything() {
//业务逻辑处理
}
}
public class ConcreteClass2 extends AbstractClass{
@Override
protected void doSomething() {
//业务逻辑处理
}
@Override
protected void doAnything() {
//业务逻辑处理
}
}
3,调用执行相应方法
public class Main {
public static void main(String[] args){
AbstractClass abstractClass1 = new ConcreteClass1();
AbstractClass abstractClass2 = new ConcreteClass2();
//调用模板方法
abstractClass1.templateMethod();
abstractClass2.templateMethod();
}
}
这个模式非常简单,可能我们都使用过只是不知道他的名字而已,这个模式也可以配合钩子使用,在父类中定义钩子,在之类中定义是否执行公共方法,具体代码如下
public abstract class AbstractClass {
//基本方法
protected abstract void doSomething();
//基本方法
protected abstract void doAnything();
//模板方法
public final void templateMethod(){
/**
* 调用基本方法完成相关逻辑
*/
this.doSomething();
//是否执行公共算法中的某个方法
if (this.canDoAnything()){
this.doAnything();
}
}
/**
* 钩子,是否可以执行公共算法中的方法
* @return
*/
protected abstract boolean canDoAnything();
}
网友评论