内容纲要
模板方法模式(Template Method)是一种行为设计模式,它在一个抽象类中定义了一个操作的骨架,并允许子类在不改变结构的情况下重新定义某些步骤的实现。这使得你可以在不修改抽象类的前提下,定制由抽象类定义的算法框架。
Java 示例代码:
首先,我们创建一个抽象类,它定义了模板方法和一些抽象方法。
public abstract class AbstractTemplate {
// 模板方法,定义算法的框架
public final void templateMethod() {
stepOne();
stepTwo();
stepThree();
}
// 抽象方法,子类需要实现的具体步骤
protected abstract void stepOne();
protected abstract void stepTwo();
protected abstract void stepThree();
}
接下来,我们创建两个子类,分别实现抽象类中的抽象方法。
public class ConcreteClassA extends AbstractTemplate {
@Override
protected void stepOne() {
System.out.println("ConcreteClassA: Step One");
}
@Override
protected void stepTwo() {
System.out.println("ConcreteClassA: Step Two");
}
@Override
protected void stepThree() {
System.out.println("ConcreteClassA: Step Three");
}
}
public class ConcreteClassB extends AbstractTemplate {
@Override
protected void stepOne() {
System.out.println("ConcreteClassB: Step One");
}
@Override
protected void stepTwo() {
System.out.println("ConcreteClassB: Step Two");
}
@Override
protected void stepThree() {
System.out.println("ConcreteClassB: Step Three");
}
}
现在,我们可以在客户端代码中使用这些类。
public class Client {
public static void main(String[] args) {
AbstractTemplate templateA = new ConcreteClassA();
templateA.templateMethod();
System.out.println("---------------------");
AbstractTemplate templateB = new ConcreteClassB();
templateB.templateMethod();
}
}
输出:
ConcreteClassA: Step One
ConcreteClassA: Step Two
ConcreteClassA: Step Three
---------------------
ConcreteClassB: Step One
ConcreteClassB: Step Two
ConcreteClassB: Step Three
通过这个示例,你可以看到模板方法模式如何将算法的骨架定义在抽象类中,同时允许子类在不改变结构的情况下重新定义某些步骤。这有助于提高代码的复用性和扩展性。