大话设计模式--模板方法模式 TemplateMethod -- C++ 实现

1. 模板方法模式: 定义一个操作中的算法骨架,而将一些操作延迟到子类,

模板方法模式使得子类可以不改变一个算法的结构既可以重定义该算法的某些特定步骤。

 

当不变和可变的行为在方法的子类实现中混在一起的时候,不变的行为就会子类中重复出现,通过模板方法模式可以将这些不变的行为搬到一个地方,这样就可帮助子类摆脱重复的不变行为的纠缠。

模板方法模式就是提供一个很好的代码复用平台。

 

实例:

template.h template.cpp 模板

#ifndef TEMPLATE_H
#define TEMPLATE_H

class Template
{
public:
    Template();
    void templateMethod();  //模板方法
    void virtual primitiveOperation1(); //可变操作1
    void virtual primitiveOperation2(); //可变操作2
};

#endif // TEMPLATE_H
#include "template.h"
#include <iostream>
using namespace std;

Template::Template()
{
}

void Template::templateMethod()
{
    cout << " templateMethod ... ... " << endl;
    primitiveOperation1();
    primitiveOperation2();
}

void Template::primitiveOperation1()
{}

void Template::primitiveOperation2()
{}

 

concretetemplate.h concretetemplate.cpp 模板实例,有不同可变操作。。

#ifndef CONCRETETEMPLATE_H
#define CONCRETETEMPLATE_H

#include "template.h"

class Concretetemplate : public Template
{
public:
    Concretetemplate();
    void  primitiveOperation1();
    void  primitiveOperation2();
};

#endif // CONCRETETEMPLATE_H
#include "concretetemplate.h"
#include <iostream>
using namespace std;

Concretetemplate::Concretetemplate()
{
}

void Concretetemplate::primitiveOperation1()
{
    cout << "primitiveOperation1" << endl;
}

void Concretetemplate::primitiveOperation2()
{
    cout << "primitiveOperation2" << endl;
}


main.cpp   可以实例更多的concretetemplate,更多的模板子类

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

int main()
{
    cout << "Template Method!" << endl;

    Template *temp = new Concretetemplate();
    temp->templateMethod();

    return 0;
}





 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值