设计模式C++模板(Template)模式
Published on 2020-08-27 16:48 in 分类: C/C++ with 萧海~
分类: C/C++

设计模式C++模板(Template)模式

    设计模式C++描述----02.模板(Template)模式(转载)

    一. 问题

    在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。Template提供了这种情况的一个实现框架。

    二. 模式

    Template 模式是采用继承的方式实现这一点:将逻辑(算法)框架放在抽象基类中,并定义好细节的接口,子类中实现细节

    三. 代码

    1. //抽象基类,实现了一个模板方法  
    2. class AbstractClass  
    3. {  
    4. public:  
    5.     virtual ~AbstractClass()  
    6.     {  
    7.     }  
    8.   
    9.         //模板方法,只在抽象基类中实现  
    10.     void TemplateMethod()  
    11.     {  
    12.         this->PrimitiveOperation1();  
    13.         this->PrimitiveOperation2();  
    14.     }  
    15.   
    16. protected:  
    17.     virtual void PrimitiveOperation1() = 0;  
    18.   
    19.     virtual void PrimitiveOperation2() = 0;  
    20.   
    21.     AbstractClass()  
    22.     {  
    23.     }  
    24. };  
    25.   
    26. //具体子类,实现操作的特定细节  
    27. class ConcreteClass1:public AbstractClass  
    28. {  
    29. public:  
    30.     ConcreteClass1()  
    31.     {  
    32.     }  
    33.   
    34.     ~ConcreteClass1()  
    35.     {  
    36.     }  
    37.   
    38. protected:  
    39.     void PrimitiveOperation1()  
    40.     {  
    41.         cout<<"ConcreteClass1...PrimitiveOperation1"<<endl;  
    42.     }  
    43.   
    44.     void PrimitiveOperation2()  
    45.     {  
    46.         cout<<"ConcreteClass1...PrimitiveOperation2"<<endl;  
    47.     }  
    48. };  
    49.   
    50. //具体子类,实现操作的特定细节  
    51. class ConcreteClass2:public AbstractClass  
    52. {  
    53. public:  
    54.     ConcreteClass2()   
    55.     {  
    56.     }  
    57.   
    58.     ~ConcreteClass2()  
    59.     {  
    60.     }  
    61.   
    62. protected:  
    63.     void PrimitiveOperation1()  
    64.     {  
    65.         cout<<"ConcreteClass2...PrimitiveOperation1"<<endl;  
    66.     }  
    67.   
    68.     void PrimitiveOperation2()  
    69.     {  
    70.         cout<<"ConcreteClass2...PrimitiveOperation2"<<endl;  
    71.     }  
    72. };  
    73.   
    74.   
    75. int main()  
    76. {  
    77.     AbstractClass* p1 = new ConcreteClass1();  
    78.     AbstractClass* p2 = new ConcreteClass2();  
    79.       
    80.     p1->TemplateMethod();  
    81.     p2->TemplateMethod();  
    82.       
    83.     return 0;  
    84. }  

    关键点就是将通用算法封装在抽象基类中,并将不同的算法细节放到子类中实现。

    原文链接:https://www.cnblogs.com/any91/category/528328.html

    posted @   萧海~  阅读(186)  评论(0编辑  收藏  举报
    编辑推荐:
    · 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
    · AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
    · 基于Microsoft.Extensions.AI核心库实现RAG应用
    · Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
    · 开发者必知的日志记录最佳实践
    阅读排行:
    · winform 绘制太阳,地球,月球 运作规律
    · AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    · 上周热点回顾(3.3-3.9)
    点击右上角即可分享
    微信分享提示
    电磁波切换