赞
踩
模板方法模式,它定义了一个算法的骨架,将一些步骤延迟到子类中实现。这个模式允许子类重新定义算法的某些步骤,而不改变算法的结构。通常,模板方法由一个抽象类实现,其中包含算法的基本步骤,并且这些步骤可以是抽象的或具体的。子类继承这个抽象类并重写其中的特定方法,从而定制算法的行为。这种模式常用于实现一个通用的算法框架,以便不同的子类可以根据自身需求实现算法的具体步骤。
实现场景:定义一个模板方法类,并使用它。
`AbstractClass` 是抽象类,其中包含一个模板方法 `templateMethod()` 和一些抽象方法 `step1()` 和 `step2()`。`ConcreteClass` 是 `AbstractClass` 的具体子类,实现了 `step1()` 和 `step2()` 方法。在 `main()` 函数中,我们创建了 `ConcreteClass` 的一个实例,并调用了 `templateMethod()` 方法,从而触发了模板方法的执行。
- #include <iostream>
-
- //定义模板方法的抽象类
- class AbstractClass {
- public:
- //模板方法
- void templateMethod() {
- step1();
- step2();
- step3();
- }
- //由子类实现的基本操作
- virtual void step1() = 0;
- virtual void step2() = 0;
- //具体操作
- void step3() {
- std::cout << "AbstractClass: step3\n";
- }
- };
-
- //实现抽象方法的具体子类
- class ConcreteClass : public AbstractClass {
- public:
- void step1() override {
- std::cout << "ConcreteClass: step1\n";
- }
-
- void step2() override {
- std::cout << "ConcreteClass: step2\n";
- }
- };
-
- int main() {
- ConcreteClass concrete;
- concrete.templateMethod();
- return 0;
- }
`AbstractClass` 是一个抽象类,其中包含一个模板方法 `templateMethod()` 和一些抽象方法 `step1()` 和 `step2()`。`ConcreteClass` 是 `AbstractClass` 的具体子类,实现了 `step1()` 和 `step2()` 方法。在 `main()` 方法中,我们创建了 `ConcreteClass` 的一个实例,并调用了 `templateMethod()` 方法,从而触发了模板方法的执行。
- package behavioralpattern.templatemethod;
-
- public class TemplateMethodDemo {
- static abstract class AbstractClass {
- // 模板方法
- public final void templateMethod() {
- step1();
- step2();
- step3();
- }
- // 由子类实现的基本操作
- protected abstract void step1();
- protected abstract void step2();
- // 具体操作
- protected void step3() {
- System.out.println("AbstractClass: step3");
- }
- }
- static class ConcreteClass extends AbstractClass {
- @Override
- protected void step1() {
- System.out.println("ConcreteClass: step1");
- }
- @Override
- protected void step2() {
- System.out.println("ConcreteClass: step2");
- }
- }
- public static void main(String[] args) {
- ConcreteClass concrete = new ConcreteClass();
- concrete.templateMethod();
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。