• 设计模式:模板方法模式(C++实现)


    模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个算法的骨架,将一些步骤的具体实现延迟到子类中。下面是一个使用C++实现模板方法模式的示例:

    #include 
    
    // 抽象基类
    class AbstractClass
    {
    public:
        // 模板方法
        void templateMethod()
        {
            primitiveOperation1();
            primitiveOperation2();
        }
    
    private:
        // 抽象方法1,需要在子类中实现
        virtual void primitiveOperation1() = 0;
        // 抽象方法2,需要在子类中实现
        virtual void primitiveOperation2() = 0;
    };
    
    // 具体子类1
    class ConcreteClass1 : public AbstractClass
    {
    private:
        void primitiveOperation1() override
        {
            std::cout << "ConcreteClass1: primitiveOperation1" << std::endl;
        }
        void primitiveOperation2() override
        {
            std::cout << "ConcreteClass1: primitiveOperation2" << std::endl;
        }
    };
    
    // 具体子类2
    class ConcreteClass2 : public AbstractClass
    {
    private:
        void primitiveOperation1() override
        {
            std::cout << "ConcreteClass2: primitiveOperation1" << std::endl;
        }
        void primitiveOperation2() override
        {
            std::cout << "ConcreteClass2: primitiveOperation2" << std::endl;
        }
    };
    
    int main()
    {
        AbstractClass *class1 = new ConcreteClass1();
        AbstractClass *class2 = new ConcreteClass2();
        class1->templateMethod(); // 输出 "ConcreteClass1: primitiveOperation1" 和 "ConcreteClass1: primitiveOperation2"
        class2->templateMethod(); // 输出 "ConcreteClass2: primitiveOperation1" 和 "ConcreteClass2: primitiveOperation2"
        delete class1;
        delete class2;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    运行结果:

    ConcreteClass1: primitiveOperation1
    ConcreteClass1: primitiveOperation2
    ConcreteClass2: primitiveOperation1
    ConcreteClass2: primitiveOperation2
    
    • 1
    • 2
    • 3
    • 4

    在上述示例中,我们首先定义了一个抽象基类 AbstractClass,其中包含一个模板方法 templateMethod()。模板方法中调用了两个抽象方法 primitiveOperation1() 和 primitiveOperation2(),这两个方法需要在子类中实现。
    然后,我们创建了两个具体子类 ConcreteClass1 和 ConcreteClass2,它们分别实现了抽象方法 primitiveOperation1() 和 primitiveOperation2()。
    在 main() 函数中,我们分别创建了 ConcreteClass1 和 ConcreteClass2 的对象,并调用它们的 templateMethod() 方法。通过调用模板方法,实际执行的是子类中具体实现的方法。运行程序后,我们可以看到输出了不同子类中实现的具体方法。
    这样,我们就实现了一个简单的模板方法模式。通过定义一个模板方法和一些抽象方法,我们可以将公共的算法骨架放在基类中,将具体实现延迟到子类中,从而实现代码的复用和扩展。

  • 相关阅读:
    Kafka总结文档
    经典文献阅读之--FEC
    第1章 数据结构的概念
    C#学习相关系列之Linq常用方法---排序(一)
    2024年新算法-牛顿-拉夫逊优化算法(NRBO)优化BP神经网络回归预测
    目标检测(4)—— 经典算法和常用指标
    脚手架cli快速创建Vue2/Vue3项目
    npm包管理工具
    关于spring嵌套事务,我发现网上好多热门文章持续性地以讹传讹
    docker 部署 mysql8.0.30
  • 原文地址:https://blog.csdn.net/wydxry/article/details/133175677