• 设计模式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. }  

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

  • 相关阅读:
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 回形取数
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    Java实现 蓝桥杯VIP 基础练习 报时助手
    block的是发送信号的线程,又不是处理槽函数的线程
  • 原文地址:https://www.cnblogs.com/any91/p/3247952.html
Copyright © 2020-2023  润新知