• C++设计模式之-模板模式


    模板方法模式

    在GOF的《设计模式:可复用面向对象软件的基础》一书中对模板方法模式是这样说的:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的接口即可重定义改算法的某些特定步骤。

    UML类图

    代码实现:

      1 // Template.cpp : 定义控制台应用程序的入口点。
      2 //
      3 
      4 #include "stdafx.h"
      5 #include <iostream>
      6 #include<string>
      7 using namespace std;
      8 
      9 
     10 class AbstractClass
     11 
     12 {
     13 
     14 public:
     15 
     16     void TemplateMethod()
     17 
     18     {
     19 
     20         PrimitiveOperation1();
     21 
     22         cout<<"TemplateMethod"<<endl;
     23 
     24         PrimitiveOperation2();
     25 
     26     }
     27 
     28 
     29 
     30 protected:
     31 
     32     virtual void PrimitiveOperation1()
     33 
     34     {
     35 
     36         cout<<"Default Operation1"<<endl;
     37 
     38     }
     39 
     40 
     41 
     42     virtual void PrimitiveOperation2()
     43 
     44     {
     45 
     46         cout<<"Default Operation2"<<endl;
     47 
     48     }
     49 
     50 };
     51 
     52 
     53 
     54 class ConcreteClassA : public AbstractClass
     55 
     56 {
     57 
     58 protected:
     59 
     60     virtual void PrimitiveOperation1()
     61 
     62     {
     63 
     64         cout<<"ConcreteA Operation1"<<endl;
     65 
     66     }
     67 
     68 
     69 
     70     virtual void PrimitiveOperation2()
     71 
     72     {
     73 
     74         cout<<"ConcreteA Operation2"<<endl;
     75 
     76     }
     77 
     78 };
     79 
     80 
     81 
     82 class ConcreteClassB : public AbstractClass
     83 
     84 {
     85 
     86 protected:
     87 
     88     virtual void PrimitiveOperation1()
     89 
     90     {
     91 
     92         cout<<"ConcreteB Operation1"<<endl;
     93 
     94     }
     95 
     96 
     97 
     98     virtual void PrimitiveOperation2()
     99 
    100     {
    101 
    102         cout<<"ConcreteB Operation2"<<endl;
    103 
    104     }
    105 
    106 };
    107 int _tmain(int argc, _TCHAR* argv[])
    108 {
    109 
    110      AbstractClass *pAbstractA = new ConcreteClassA;
    111 
    112      pAbstractA->TemplateMethod();
    113 
    114  
    115 
    116      AbstractClass *pAbstractB = new ConcreteClassB;
    117 
    118      pAbstractB->TemplateMethod();
    119 
    120  
    121 
    122      if (pAbstractA) delete pAbstractA;
    123 
    124      if (pAbstractB) delete pAbstractB;
    125 
    126     system("pause");
    127     return 0;
    128 }

  • 相关阅读:
    去哪儿爬虫加数据分析可视化
    go语言使用xpath
    python操作redis命令
    quart-process_bar
    刷交通的沃尔玛卡了,准备去刷1000元,10万积分姿势
    安卓手机安装虚拟定位的方法Xposed安装器+模拟位置(Xposed模块)
    OSPF里几个特殊区域(stub、Totally stubby、NSSA、Totally NSSA)总结
    OSPF两种组播地址的区别和联系
    ros建立ospf邻居的条件
    我国法定报告的传染病分为几类?包括哪些传染病?
  • 原文地址:https://www.cnblogs.com/wxmwanggood/p/9274589.html
Copyright © 2020-2023  润新知