推荐答案
模板方法模式 (Template Method) 是一种行为设计模式,它定义了一个算法的框架,并允许子类在不改变算法结构的情况下重新定义算法的某些步骤。模板方法模式通过将算法的通用步骤放在父类中,而将具体实现延迟到子类中,从而实现了代码的复用和扩展。
本题详细解读
模板方法模式的概念
模板方法模式的核心思想是将一个算法的骨架定义在一个方法中,并将一些步骤的具体实现延迟到子类中。这个骨架方法通常被称为“模板方法”,它定义了一系列的步骤,这些步骤可以是抽象的,也可以有默认的实现。子类可以通过重写这些步骤来改变算法的行为,而不需要改变算法的整体结构。
模板方法模式的作用
- 代码复用:模板方法模式通过将通用代码放在父类中,避免了代码的重复。
- 扩展性:子类可以通过重写父类中的某些步骤来扩展或修改算法的行为,而不需要修改父类的代码。
- 控制结构:模板方法模式允许父类控制算法的整体流程,确保算法的步骤按照预定的顺序执行。
模板方法模式与策略模式的区别
- 结构:模板方法模式使用继承来实现算法的扩展,而策略模式使用组合来实现算法的替换。
- 灵活性:策略模式更加灵活,因为它允许在运行时动态地替换算法,而模板方法模式在编译时就已经确定了算法的结构。
- 适用场景:模板方法模式适用于算法的整体结构固定,但某些步骤需要灵活变化的场景;策略模式适用于需要动态切换算法的场景。
示例代码
// www.javascriptcn.com code example
class AbstractClass {
templateMethod() {
this.stepOne();
this.stepTwo();
this.stepThree();
}
stepOne() {
console.log('AbstractClass: stepOne');
}
stepTwo() {
console.log('AbstractClass: stepTwo');
}
stepThree() {
console.log('AbstractClass: stepThree');
}
}
class ConcreteClass extends AbstractClass {
stepTwo() {
console.log('ConcreteClass: stepTwo');
}
}
const concreteClass = new ConcreteClass();
concreteClass.templateMethod();在这个示例中,AbstractClass 定义了模板方法 templateMethod,它调用了三个步骤。ConcreteClass 继承了 AbstractClass 并重写了 stepTwo 方法,从而改变了算法的行为。