描述
模板方法模式是一种软件设计模式,它定义了一个算法的骨架,而将一些步骤的具体实现延迟到子类中。该模式基于“开闭原则”,即对修改关闭,对扩展开放。
- 在模板方法模式中,算法的骨架由一个抽象类定义,并包含若干个抽象方法,这些抽象方法在具体子类中被实现。该抽象类还可以定义一些具体方法,这些方法可以被子类继承或重写。
- 使用模板方法模式,可以在不改变算法整体结构的情况下,通过修改其中某些步骤的具体实现来定制算法的行为。模板方法模式常用于设计框架和类库,以便将算法的核心部分与具体实现分离,并使算法的具体实现可以灵活地配置和替换。
实现
银行抽象类
public abstract class Bank {
void withdrawMoney(){
operate1();
operate2();
operate3();
}
abstract void operate1();
abstract void operate2();
abstract void operate3();
}
银行实现类
public class BankImpl extends Bank{
@Override
void operate1() {
System.out.println("operate1");
}
@Override
void operate2() {
System.out.println("operate2");
}
@Override
void operate3() {
System.out.println("operate3");
}
}
客户端
public class Client {
public static void main(String[] args) {
Bank bank = new BankImpl();
bank.withdrawMoney();
}
}
实验结果
使用场景
-
多个子类有公共的行为,但是每个子类的具体实现略有不同。这种情况下可以使用模板方法模式,将公共的行为定义在父类中,具体的实现放在子类中。
-
有一些复杂的算法,其中某些步骤可以由子类自定义实现。模板方法模式可以将算法的骨架定义在父类中,子类只需要实现自定义的步骤即可。
-
一些代码的流程是固定的,但是某些细节需要根据不同的业务逻辑进行定制。这种情况下可以使用模板方法模式,将固定的流程定义在父类中,让子类根据业务逻辑进行定制。