一、什么是模板方法模式?
模板方法模式(Template Method) 定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
类型:形为型模式
顺口溜:中访策备迭 观模命状职解
二、模板模式UML
三、JAVA代码实现
package com.amosli.dp.behavior.template;
public abstract class AbstractClass {
public void templateMethod(){
primitiveMethod1();
primitiveMethod2();
}
public abstract void primitiveMethod1();
public abstract void primitiveMethod2();
}
package com.amosli.dp.behavior.template;
public class ConcreteClassA extends AbstractClass{
@Override
public void primitiveMethod1() {
System.out.println("ConcreteClassA primitive method 1...");
}
@Override
public void primitiveMethod2() {
System.out.println("ConcreteClassA primitive method 2...");
}
}
package com.amosli.dp.behavior.template;
public class ConcreteClassB extends AbstractClass{
@Override
public void primitiveMethod1() {
System.out.println("ConcreteClassB primitive method 1...");
}
@Override
public void primitiveMethod2() {
System.out.println("ConcreteClassB primitive method 2...");
}
}
package com.amosli.dp.behavior.template;
public class Client {
public static void main(String[] args) {
AbstractClass abstractClass = new ConcreteClassA();
abstractClass.templateMethod();
abstractClass = new ConcreteClassB();
abstractClass.templateMethod();
}
}
四、使用场景
当不变和可变的行为在方法的子类中混合在一起时,不变的行为就会在子类中重复出现。我们可以通过模板方法模式将这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠结。
五、优缺点
1、优点
模板方法所不变的行为搬到超类,去除子类中的重复代码,提供了一个很好了代码复用平台;
2、缺点
将不变行为集成到超类中,当类的行为比较复杂时,对于超类的管理和扩展将会越来越复杂,所以使用模板方法模式时,切记对于不对的类分配不同的职责(SRP)。
六、源码地址
本系列文章源码地址,https://github.com/amosli/dp 欢迎Fork & Star !!