• 设计模式:模板方法模式(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() 方法。通过调用模板方法,实际执行的是子类中具体实现的方法。运行程序后,我们可以看到输出了不同子类中实现的具体方法。
    这样,我们就实现了一个简单的模板方法模式。通过定义一个模板方法和一些抽象方法,我们可以将公共的算法骨架放在基类中,将具体实现延迟到子类中,从而实现代码的复用和扩展。

  • 相关阅读:
    从设计模式理解Spring原理之注册器模式
    全网最全的AItium Designer 16下载资源与安装步骤
    流程图高级用法【Markdown进阶篇】
    037、目标检测-算法速览
    PHP+MySQL人才招聘小程序系统源码 带完整前端+后端搭建教程
    做了大半年的软件测试,感觉我在浪费时间···
    Linux驱动开发(同步与互斥)
    vue3探索——vue3+vite2动态绑定图片优雅解决方案
    【算法刷题day34】Leetcode:1005. K 次取反后最大化的数组和、134. 加油站、135. 分发糖果
    MetaCost与重采样结合的不平衡分类算法——RS-MetaCost
  • 原文地址:https://blog.csdn.net/wydxry/article/details/133175677