template模式是个比较容易理解的模式,它用来解决生活中红这么一种情况:当一个业务逻辑,或者说算法,是在不同的对象中有不同的细节实现,但算法相同时,为了简化接口,可以用template模式,即,定义一个共用的abstract类,将不同的细节实现都定义成虚函数有待各个子类实现,其实就是多态一下。
UML图:
代码:
#ifndef _TEMPALTE_H__
#define _TEMPALTE_H__
class abstract_class
{
public:
virtual ~abstract_class();
void template_method();
protected:
virtual void primitive_operation_1() = 0;
virtual void primitive_operation_2() = 0;
abstract_class();
};
class concrete_class_A:public abstract_class
{
public:
concrete_class_A();
~concrete_class_A();
void primitive_operation_1();
void primitive_operation_2();
};
class concrete_class_B:public abstract_class
{
public:
concrete_class_B();
~concrete_class_B();
void primitive_operation_1();
void primitive_operation_2();
};
#endif
//template.cpp
#include "template.h"
#include <iostream>
using namespace std;
abstract_class::abstract_class()
{
}
abstract_class::~abstract_class()
{
}
void abstract_class::template_method()
{
primitive_operation_1();
primitive_operation_2();
}
concrete_class_A::concrete_class_A()
{
}
concrete_class_A::~concrete_class_A()
{
}
void concrete_class_A::primitive_operation_1()
{
cout<<"print out from concrete_class_A::primitive_operation_1"<<endl;
}
void concrete_class_A::primitive_operation_2()
{
cout<<"print out from concrete_class_A::primitive_operation_2"<<endl;
}
concrete_class_B::concrete_class_B()
{
}
concrete_class_B::~concrete_class_B()
{
}
void concrete_class_B::primitive_operation_1()
{
cout<<"print out from concrete_class_B::primitive_operation_1"<<endl;
}
void concrete_class_B::primitive_operation_2()
{
cout<<"print out from concrete_class_B::primitive_operation_2"<<endl;
}
//main.cpp
#include "template.h"
int main(int argc,char ** argv)
{
abstract_class * p_abs = new concrete_class_A();
p_abs->template_method();
delete p_abs;
p_abs = new concrete_class_B();
p_abs->template_method();
delete p_abs;
return 0;
}
对于这个问题其实还可以用strategy pattern解决,敬请收看下一篇。