模板方法模式的代码实践示例
模板方法模式的概念:
在操作中定义算法的框架,将一些步骤延迟到子类中。
模板方法允许子类在不改变算法结构的情况下重新定义算法的某些步骤。
什么时候可以用模板方法模式?
有很固定的流程和步骤,就可以使用模板方法模式。
所有子类都会按照相同的模板执行算法。子类不能改变算法结构,但是可以重新定义算法的某些步骤。
如果每个子类具有不同流程和步骤,那模板方法不适用。
示例:
- Template:
public interface Template {
default void doSomething() {
// 固定不变的步骤,每个子类都一样。公共逻辑。
commonStep();
//有变化的步骤,每个子类不一样
step1();
//有变化的步骤,每个子类不一样
step2();
}
/**
* 固定不变的步骤,每个子类都一样。公共逻辑。
*/
default void commonStep() {
System.out.println("doSomething commonStep");
}
/**
* 有变化的步骤,每个子类不一样
*/
void step1();
/**
* 有变化的步骤,每个子类不一样
*/
void step2();
}
- Template1:
public class Template1 implements Template {
@Override
public void step1() {
System.out.println("Template1 step1");
}
@Override
public void step2() {
System.out.println("Template1 step2");
}
}
- Template2 :
class Template2 implements Template {
@Override
public void step1() {
System.out.println("Template2 step1");
}
@Override
public void step2() {
System.out.println("Template2 step2");
}
}
- Client:
public class Client {
public static void main(String[] args) {
Template template1 = new Template1();
System.out.println("template1 doSomething");
template1.doSomething();
System.out.println("-------------");
Template template2 = new Template2();
System.out.println("template2 doSomething");
template2.doSomething();
}
}
执行结果:
template1 doSomething
doSomething commonStep
Template1 step1
Template1 step2
-------------
template2 doSomething
doSomething commonStep
Template2 step1
Template2 step2
可以看到,子类1(示例中的template1) 和 子类2 (示例中的template2) 都有固定的步骤 commonStep,
算法结构是: 固定的步骤 commonStep --> 可变的步骤 step1 --> 可变的步骤 step2 (当然也可以是其他的顺序,根据实际情况处理) ,
在不改变算法结构的情况下,子类1 和 子类2 重新定义算法的某些步骤 step1、step2 。
浙公网安备 33010602011771号