zoukankan      html  css  js  c++  java
  • Template 模式

    Template 模式是很简单模式,但是也应用很广的模式。Template 是采用继承的方式实现算法的异构,其关键点就是将通用算法封装在抽象基类中,并将不同的算法细节放到子类中实现。Template 模式获得一种反向控制结构效果, 这也是面向对象系统的分析和设计中一个原则 DIP(依赖倒置:Dependency Inversion Principles) 。其含义就是父类调用子类的操作(高层模块调用低层模块的操作) ,低层模块实现高层模块声明的接口。这样控制权在父类(高层模块) ,低层模块反而要依赖高层模块。

     1 //////////////////Template.h////////////////////////////////////////////////////////
     2 #pragma once
     3 class  AbstractClass
     4 {
     5 public:
     6     virtual ~AbstractClass();
     7     void TemplateMethod();
     8 protected:
     9     AbstractClass();
    10     virtual void PrimitiveOperation1() = 0;
    11     virtual void PrimitiveOperation2() = 0;
    12 private:
    13 };
    14 
    15 class ConcreteClass1 :public AbstractClass
    16 {
    17 public:
    18     ~ConcreteClass1();
    19     ConcreteClass1();
    20 protected:
    21     void PrimitiveOperation1();
    22     void PrimitiveOperation2();
    23 private:
    24 };
    25 
    26 class ConcreteClass2 :public AbstractClass
    27 {
    28 public:
    29     ~ConcreteClass2();
    30     ConcreteClass2();
    31 protected:
    32     void PrimitiveOperation1();
    33     void PrimitiveOperation2();
    34 private:
    35 };
     1 ///////////Template.cpp///////////////////////////////////////////////////////////////
     2 #include "Template.h"
     3 #include <iostream>
     4 using namespace std;
     5 AbstractClass::AbstractClass()
     6 {
     7 
     8 }
     9 AbstractClass::~AbstractClass()
    10 {
    11 
    12 }
    13 void AbstractClass::TemplateMethod()
    14 {
    15     this->PrimitiveOperation1();
    16     this->PrimitiveOperation2();
    17 }
    18 
    19 ConcreteClass1::ConcreteClass1()
    20 {
    21     cout<<"泡茶"<<endl;
    22 
    23 }
    24 ConcreteClass1::~ConcreteClass1()
    25 {
    26 
    27 }
    28 void ConcreteClass1::PrimitiveOperation1()
    29 {
    30     cout<<"放入茶叶"<<endl; 
    31 }
    32 void ConcreteClass1::PrimitiveOperation2()
    33 {
    34     cout<<"倒入开水"<<endl; 
    35 }
    36 
    37 ConcreteClass2::ConcreteClass2()
    38 {
    39     cout<<"泡咖啡"<<endl;
    40 }
    41 ConcreteClass2::~ConcreteClass2()
    42 {
    43 
    44 }
    45 void ConcreteClass2::PrimitiveOperation1()
    46 {
    47     cout<<"放入咖啡"<<endl; 
    48 }
    49 void ConcreteClass2::PrimitiveOperation2()
    50 {
    51     cout<<"加适量开水"<<endl; 
    52 }
     1 /////////////main.cpp/////////////////////////////////////////////////////////////
     2 #include "Template.h"
     3 #include <iostream>
     4 int main()
     5 {
     6     AbstractClass* a = new ConcreteClass1();
     7     a->TemplateMethod();
     8     AbstractClass* b = new ConcreteClass2();
     9     b->TemplateMethod();
    10     getchar();
    11 }
  • 相关阅读:
    团队项目第二阶段——第一天
    团队项目第一阶段绩效评估
    铁大树洞与市面上现有APP对比
    第一阶段其他组评价汇总
    第一阶段对其他组的评价
    铁大树洞app功能演示和使用说明
    团队冲刺——第十天
    团队冲刺——第九天
    团队冲刺——第八天
    梦断代码读后感04--毁灭即拯救
  • 原文地址:https://www.cnblogs.com/csxcode/p/3729932.html
Copyright © 2011-2022 走看看