结构型 - 模板方法模式

目录
设计思想
模板方法模式(Template Method)是一种行为设计模式,它在超类中定义了一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。
类图
代码实现
abstract class AbstractClass {
public void templeteMthod() {
step1();
step2();
step3();
step4();
}
public void step1() {
System.out.println("AbstractClass step1 invoke.");
}
public void step2() {
System.out.println("AbstractClass step2 invoke.");
}
public void step3() {
System.out.println("AbstractClass step3 invoke.");
}
public void step4() {
System.out.println("AbstractClass step4 invoke.");
}
}
class ConcreteClassA extends AbstractClass {
public void step3() {
System.out.println("ConcreteClassA step3 invoke.");
}
public void step4() {
System.out.println("ConcreteClassA step4 invoke.");
}
}
class ConcreteClassB extends AbstractClass {
public void step1() {
System.out.println("ConcreteClassB step1 invoke.");
}
public void step2() {
System.out.println("ConcreteClassB step2 invoke.");
}
}
public class Client {
public static void main(String[] args) {
AbstractClass object = new ConcreteClassA();
object.templeteMthod();
}
}
优缺点
优点:
- 你可仅允许客户端重写一个大型算法中的特定部分,使得算法其他部分修改对其所造成的影响减小。
- 你可将重复代码提取到一个超类中。
缺点:
- 通过子类抑制默认步骤实现可能会导致违反里氏替换原则。
- 模板方法中的步骤越多,其维护工作就可能会越困难。
适用场景
- 当你只希望客户端扩展某个特定算法步骤,而不是整个算法或其结构时,可使用模板方法模式。
- 当多个类的算法除一些细微不同之外几乎完全一样时,你可使用该模式。但其后果就是,只要算法发生变化,你就可能需要修改所有的类。