北语网站app,徐州企业网站建设公司,wordpress更改登录地址,wordpress 免邮箱意图
定义一个操作中的算法骨架#xff0c;而将一些步骤延迟到子类中#xff0c;Template Method 使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
结构 AbstractClass#xff08;抽象类#xff09;定义抽象的原语操作#xff0c;具体的子类将重定…意图
定义一个操作中的算法骨架而将一些步骤延迟到子类中Template Method 使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
结构 AbstractClass抽象类定义抽象的原语操作具体的子类将重定义它们以实现一个算法的各个步骤实现模版方法定一个算法的骨架该模版方法不仅调用原语操作也调用定义在AbstractClass或其他对象中的操作。ConcreteClass具体类实现原语操作以完成算法中与特定子类相关的步骤。
适用性
一次性实现一个算法不变的部分并将可变的行为留给子类来实现各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。控制子类扩展。模版方法旨在特定点调用“hook”操作默认的行为子类可在必要时进行重定义扩展这就只允许在这些点进行扩展。
代码示例
// 抽象类 AbstractClass
abstract class AbstractClass {// 模板方法定义算法的骨架public void templateMethod() {// 调用具体的原语操作operation1();// 调用定义在 AbstractClass 中的操作operation2();// 允许具体子类重定义的钩子操作if (hookMethod()) {operation3();}}// 原语操作1protected abstract void operation1();// 原语操作2protected void operation2() {System.out.println(AbstractClass 中的操作2);}// 钩子操作具体子类可以选择性实现protected boolean hookMethod() {return true;}// 钩子操作的具体实现protected void operation3() {System.out.println(AbstractClass 中的操作3);}
}// 具体类 ConcreteClass
class ConcreteClass extends AbstractClass {Overrideprotected void operation1() {System.out.println(ConcreteClass 中的操作1);}Overrideprotected void operation3() {System.out.println(ConcreteClass 中的操作3);}Overrideprotected boolean hookMethod() {return false;}
}// 主类
public class Main {public static void main(String[] args) {AbstractClass abstractClass new ConcreteClass();abstractClass.templateMethod();}
}
AbstractClass 是一个抽象类它定义了模板方法 templateMethod其中包含了算法的骨架。AbstractClass 中包含了原语操作1、操作2以及钩子操作。ConcreteClass 是 AbstractClass 的具体子类它重定义了原语操作1和操作3并选择性地实现了钩子操作。在 main 方法中创建了一个 ConcreteClass 实例并调用了 templateMethod 方法来执行算法。