模板方法模式(c++实现)

时间:2020-07-14 13:12:41   收藏:0   阅读:67

外观模式

模式定义

模板方法模式(Facade),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

模式动机

UML类图

技术图片

源码实现

class AbstractClass
{
public:
    AbstractClass();
    virtual ~AbstractClass();

    void MethodA();
    virtual int MethodB(int a = 0, int b = 0);
};		
#include "abstractclass.h"
#include <iostream>

AbstractClass::AbstractClass()
{

}

AbstractClass::~AbstractClass()
{

}

void AbstractClass::MethodA()
{
    std::cout << __FUNCTION__ << " Call method b :" << this->MethodB(5, 4) << std::endl;
}

int AbstractClass::MethodB(int a, int b)
{
    return a + b;
}
#include "abstractclass.h"

class ConcreteClassA : public AbstractClass
{
public:
    ConcreteClassA();
    int MethodB(int a = 0, int b = 0) override;
};
#include "concreteclassa.h"

ConcreteClassA::ConcreteClassA()
{

}

int ConcreteClassA::MethodB(int a, int b)
{
    return a * b;
}
#include "concreteclassb.h"

ConcreteClassB::ConcreteClassB()
{

}

int ConcreteClassB::MethodB(int a, int b)
{
    return a - b;
}
#include "concreteclassb.h"

ConcreteClassB::ConcreteClassB()
{

}

int ConcreteClassB::MethodB(int a, int b)
{
    return a - b;
}
#include <iostream>
#include "concreteclassa.h"
#include "concreteclassb.h"

using namespace std;

int main()
{
    ConcreteClassA* classA = new ConcreteClassA();
    classA->MethodA();

    ConcreteClassB* classB = new ConcreteClassB();
    classB->MethodA();
    return 0;
}

MethodA Call method b :20

MethodA Call method b :1

优点

模板方法模式的优点

缺点

模式的缺点

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!