在模板模式中,通常包含以下角色:
1. 模板类(Template): 定义了一个算法的骨架,将算法的某些步骤延迟到子类实现。
public abstract class Template {
// 模板方法,定义算法的骨架
public final void templateMethod() {
step1();
step2();
step3();
}
// 抽象方法,由子类实现
protected abstract void step1();
protected abstract void step2();
protected abstract void step3();
}
2. 具体模板类(ConcreteTemplate): 实现了模板类中定义的抽象方法,完成算法的具体步骤。
public class ConcreteTemplate extends Template {
@Override
protected void step1() {
System.out.println("ConcreteTemplate: Step 1");
}
@Override
protected void step2() {
System.out.println("ConcreteTemplate: Step 2");
}
@Override
protected void step3() {
System.out.println("ConcreteTemplate: Step 3");
}
}
3. 客户端代码: 创建具体模板类的实例,调用模板方法执行算法。
public class Client {
public static void main(String[] args) {
Template template = new ConcreteTemplate();
template.templateMethod();
}
}
在这个例子中,Template 类定义了一个算法的骨架,包含了三个步骤:step1、step2 和 step3。具体的实现由子类完成。ConcreteTemplate 是具体模板类,实现了模板类中的抽象方法,完成了算法的具体步骤。
模板模式的优势在于它提供了一个固定的算法结构,将一些步骤的实现留给子类。这样可以在不改变算法结构的情况下,通过子类来定制算法的具体实现。这对于实现一些框架或者类库中的通用算法非常有用。
转载请注明出处:http://www.pingtaimeng.com/article/detail/13960/设计模式