Java模板方法模式是一种行为型设计模式,其本质是在一个抽象类中定义了一个算法的框架,而将具体实现延迟到子类中实现。它允许子类可以修改算法的某些步骤,但不改变算法的结构。
以下是一个简单的Java模板方法模式的示例:
// 抽象类
public abstract class AbstractClass {
public void templateMethod() {
// 执行步骤1
step1();
// 执行步骤2
step2();
// 执行步骤3
step3();
}
protected abstract void step1();
protected abstract void step2();
protected void step3() {
System.out.println("执行默认的步骤3");
}
}
// 具体类1
public class ConcreteClass1 extends AbstractClass {
@Override
protected void step1() {
System.out.println("执行具体类1的步骤1");
}
@Override
protected void step2() {
System.out.println("执行具体类1的步骤2");
}
}
// 具体类2
public class ConcreteClass2 extends AbstractClass {
@Override
protected void step1() {
System.out.println("执行具体类2的步骤1");
}
@Override
protected void step2() {
System.out.println("执行具体类2的步骤2");
}
@Override
protected void step3() {
System.out.println("执行具体类2的步骤3");
}
}
// 测试代码
public class TemplateMethodDemo {
public static void main(String[] args) {
AbstractClass c1 = new ConcreteClass1();
c1.templateMethod(); // 输出:执行具体类1的步骤1、执行具体类1的步骤2、执行默认的步骤3
AbstractClass c2 = new ConcreteClass2();
c2.templateMethod(); // 输出:执行具体类2的步骤1、执行具体类2的步骤2、执行具体类2的步骤3
}
}
在这个示例中,抽象类AbstractClass中定义了一个模板方法templateMethod(),该方法固定了算法的框架,但是其中某些步骤被定义成抽象方法或者可重写的方法,以便让子类实现自己的行为。具体类ConcreteClass1和ConcreteClass2继承自AbstractClass,并实现了其中的抽象方法或可重写方法来完成自己特有的行为。测试代码展示了如何使用模板方法模式来实现对象的算法框架,同时允许子类灵活地实现自己的行为。