C++设计模式-TemplateMethod

C++设计模式-TemplateMethod
意图:
定义一个操作中的算法的骨架,而将这些具体骤延的实现迟到子类中.
UML图:
C++设计模式-TemplateMethod_第1张图片
解析:
TemplateMethod的关键在于在基类中定义了一个算法的轮廓,但是算法每一步具体的实现留给了派生类,但是这样也造成设计灵活性不高的缺点,因为轮廓已经定下来了要想改变就比较困难
适用:
一次性实现一个算法的不变的部分,并将可以变的行为留给子类来实现
各子类中公共的行为应被取出来并集中到一个公共父类中以避免代码重复,首先识别现有代码中的不同之处,并且将有不同之处分离为新的操作,最后,用一个调用这些新的操作的模板方法来替换这些不同的代码
控制子类扩展,模板方法只在特定点调用HOOK操作,这样就只允许在这些点进行扩展

#include 
" stdafx.h "
#include 
< iostream >
using   namespace  std;

/**/ //////////////////////////////////////////////////////////////////////////
class  AbstractClass
{
public:
    AbstractClass()
{}
    
virtual ~AbstractClass(){}

    
//这个函数定义了算法轮廓
    void TempplateMethod();
protected:
    
virtual void PrimitiveOperation1() = 0;//算法中具体依赖的函数在子类中实现
    virtual void PrimitiveOperation2() = 0;
}
;

class  ConCreateClass :  public  AbstractClass
{
public:
    ConCreateClass()
{}
    
virtual ~ConCreateClass(){}

protected:
    
virtual void PrimitiveOperation1();
    
virtual void PrimitiveOperation2();
}
;
void  ConCreateClass::PrimitiveOperation1()
{
    cout 
<< "PrimitiveOperation1 by ConCreateClass\n";
}

void  ConCreateClass::PrimitiveOperation2()
{
    cout 
<< "PrimitiveOperation2 by ConCreateClass\n";
}

void  AbstractClass::TempplateMethod()
{
    PrimitiveOperation1();
    PrimitiveOperation2();
}

/**/ //////////////////////////////////////////////////////////////////////////
int  _tmain( int  argc,  char *  argv[])
{
    AbstractClass
* pConCreatetClass = new ConCreateClass;
    pConCreatetClass
->TempplateMethod();

    delete pConCreatetClass;

    system(
"pause");
    
return 0;
}


你可能感兴趣的:(C++设计模式-TemplateMethod)