模板方法模式

介绍

Template Method模式也叫模板方法模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为模板方法模式是由抽象模板和具体模板构成,抽象模板分为两类

  • 基本方法:基本操作,有子类实现的方法,在模板方法中被调用
  • 模板方法:可以由一个或多个,是一个具体的方法,也就是一个框架,实现对基本方法的掉队,完成固定的逻辑。为了防止恶意的操作一般模板方法都加上final关键字不允许被覆写

具体模板实现抽象模板,但只覆写基本方法

优点:封装不变部分,扩展可变部分;提取公共部分代码;便于维护、行为由父类控制,子类实现

缺点:抽象类纯虚函数;子类执行的结果影响了父类的结果

Template Method模式-般应用在具有以下条件的应用中:
    .具有统一的操作步骤或操作过程。
    .具有不同的操作细节。
    .存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同。

多个子类有公有的方法,并且逻辑基本相同时;重要、复杂的算法,可以把核心算法设计为模板方法;重构时把相同的代码抽取到父类中。

UML类图:

简单例子:

 

#ifndef SIMPLE_TEMPLET_H
#define SIMPLE_TEMPLET_H

#include <iostream>

using namespace std;

class AbstractClass
{
public:
    void templateMethod()
    {
        primitiveOperation1();
        primitiveOperation2();
        cout<<"AbstractClass \n";

    }

    virtual void primitiveOperation1() = 0;
    virtual void primitiveOperation2() = 0;
};


class ConcreteClassA : public AbstractClass
{
public:
    void primitiveOperation1()
    {
        cout<<"具体类 A 方法 1 的实现"<<endl;
    }

    void primitiveOperation2()
    {
        cout<<"具体类 A 方法 2 的实现"<<endl;
    }
};

class ConcreteClassB : public AbstractClass
{
public:
    void primitiveOperation1()
    {
        cout<<"具体类 B 方法 1 的实现"<<endl;
    }

    void primitiveOperation2()
    {
        cout<<"具体类 B 方法 2 的实现"<<endl;
    }
};


#endif // SIMPLE_TEMPLET_H

调用:

#include "simple_templet.h"

int main()
{

    AbstractClass *ac;

    ac = new ConcreteClassA;
    ac->templateMethod();

    ac = new ConcreteClassB;
    ac->templateMethod();

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liu-Eleven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值