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 }
  • 相关阅读:
    UVA 254 Towers of Hanoi
    UVA 701 The Archeologists' Dilemma
    UVA 185 Roman Numerals
    UVA 10994 Simple Addition
    UVA 10570 Meeting with Aliens
    UVA 306 Cipher
    UVA 10160 Servicing Stations
    UVA 317 Hexagon
    UVA 10123 No Tipping
    UVA 696 How Many Knights
  • 原文地址:https://www.cnblogs.com/csxcode/p/3729932.html
Copyright © 2011-2022 走看看