设计模式之模板方法模式

个人初步理解:模板方法是通过父类调用子类的实现。

基类:抽象父类

#pragma once
class AbstractClass
{
public:
    virtual ~AbstractClass();

    void TemplateMethod();

protected:
    AbstractClass();

    virtual void PrimitiveOperation1() = 0;

    virtual void PrimitiveOperation2() = 0;
};
#include "AbstractClass.h"


AbstractClass::AbstractClass()
{
}


AbstractClass::~AbstractClass()
{
}

void AbstractClass::TemplateMethod()
{
    this->PrimitiveOperation1();

    this->PrimitiveOperation2();
}

 

派生类1

#pragma once
#include "AbstractClass.h"
class ConcreateClass1 :
    public AbstractClass
{
public:
    ConcreateClass1();
    ~ConcreateClass1();

protected:
    void PrimitiveOperation1();

    void PrimitiveOperation2();
};
#include "ConcreateClass1.h"
#include <iostream>


ConcreateClass1::ConcreateClass1()
{
}


ConcreateClass1::~ConcreateClass1()
{
}

void ConcreateClass1::PrimitiveOperation1()
{
    std::cout << "ConcreateClass1...PrimitiveOperation1..." << std::endl;
}

void ConcreateClass1::PrimitiveOperation2()
{
    std::cout << "ConcreateClass1...PrimitiveOperation2..." << std::endl;
}

 

派生类2

#pragma once
#include "AbstractClass.h"
class ConcreateClass2 :
    public AbstractClass
{
public:
    ConcreateClass2();
    ~ConcreateClass2();

protected:
    void PrimitiveOperation1();

    void PrimitiveOperation2();
};
#include "ConcreateClass2.h"
#include <iostream>


ConcreateClass2::ConcreateClass2()
{
}


ConcreateClass2::~ConcreateClass2()
{
}

void ConcreateClass2::PrimitiveOperation1()
{
    std::cout << "ConcreateClass2...PrimitiveOperation1" << std::endl;
}

void ConcreateClass2::PrimitiveOperation2()
{
    std::cout << "ConcreateClass2...PrimitiveOperation2" << std::endl;
}

 

测试

#include <iostream>

#include "ConcreateClass1.h"
#include "ConcreateClass2.h"

int main()
{
    AbstractClass *p1 = new ConcreateClass1();

    AbstractClass *p2 = new ConcreateClass1();

    p1->TemplateMethod();

    p2->TemplateMethod();

    if (p1)
    {
        delete p1;
        p1 = NULL;
    }

    if (p2)
    {
        delete p2;
        p2 = NULL;
    }
    std::cout << "Hello World!\n"; 
}

 

posted @ 2019-10-31 10:27  N_zero  阅读(128)  评论(0)    收藏  举报