zoukankan      html  css  js  c++  java
  • 设计模式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. }  

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

  • 相关阅读:
    git切换分支报错解决
    网上看到的一个布局神器
    js获取滚动条,文档,浏览器高度
    使用iView-cli创建一个pc端网页(1)
    ajax详解与用途
    JavaScript中for/in和for的区别
    排序
    Java中getResourceAsStream的用法
    java程序打包成exe的总结
    使用7zip把jre集成到绿色运行程序内
  • 原文地址:https://www.cnblogs.com/any91/p/3247952.html
Copyright © 2011-2022 走看看