-Template design patterns (behavior) algorithm using inheritance manner encapsulating the abstract base class, subclass implementation details. Object-oriented multi-state algorithm loose coupling and high-level interface details.

Source code for the following: Design Solutions for fine pattern -GoF 23 design patterns to achieve desorption and C ++ source code

//Template.h

class AbstractClass
{
public:
    virtual ~AbstractClass();
    void TemplateMethod();
protected:
    virtual void PrimitiveOperation1() = 0;
    virtual void PrimitiveOperation2() = 0;
    AbstractClass();
private:
};

class ConcreateClass1 :public AbstractClass
{
public:
    ConcreateClass1();
    virtual ~ConcreateClass1();
protected:
    void PrimitiveOperation1();
    void PrimitiveOperation2();
private:

};

class ConcreateClass2 :public AbstractClass
{
public:
    ConcreateClass2();
    virtual ~ConcreateClass2();
protected:
    void PrimitiveOperation1();
    void PrimitiveOperation2();
private:
};

//Template.cpp

#include"Template.h"
#include<iostream>

AbstractClass::AbstractClass(){}
AbstractClass::~AbstractClass(){}
void AbstractClass::TemplateMethod()
{
    this->PrimitiveOperation1();
    this->PrimitiveOperation2();
}
ConcreateClass1::ConcreateClass1(){}
ConcreateClass1::~ConcreateClass1(){}
void ConcreateClass1::PrimitiveOperation1()
{
    std::cout << "ConcreateClass1 ...PrimitiveOperation1" << std::endl;
}
void ConcreateClass1::PrimitiveOperation2()
{
    std::cout << "ConcreateClass1 ... PrimitiveOperation2" << std::endl;
}

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

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

//main.cpp

#include"Template.h"
#include<iostream>
#include<string>

int main(int args, char* argv)
{
    ConcreateClass1* p1 = new ConcreateClass1();
    ConcreateClass2* p2 = new ConcreateClass2();
    p1->TemplateMethod();
    p2->TemplateMethod();
    getchar();
    return 0;
}

Guess you like

Origin www.cnblogs.com/fourmi/p/12079184.html