7.模板方法

1.说明
请参阅第一章。
2.模板方法模式说明
模板方法模式:定义了一个操作算法的骨架,而将这些算法的实现延迟到子类,使得可以不改变一个算法的结构,而可以重定义某些特定的实现步骤。
继承的意义:在多个子类的重复都应该提炼到父类中去。
模板方法使用范围:当要完成某一细节层次一致的一个过程或一系列步骤时,但其个别步骤在更详细的层次上有不同的实现时,我们通常采用模板方法来处理。
优点:模板方法通常是把不变的行为迁移到超类,去除子类中重复的代码。
当不变的行为和可变的行为在子类中混合在一起时,不变的行为就会重复出现,通过模板方法可以把这些行为迁移到单一的地方,实现复用。
通俗:子类完成具体的实现,父类对这些实现调用顺序进行封装,接口提供等,client端不需要知道调用顺序不同,接口实现差异。
3.UML
这里写图片描述
4.代码
代码背景:统计xiao和zp起床过程所花的时间, 流程是一样的,但是每个人的花的值是不一样的。起床的流程都是一样的,里面的值是不一样的

 //模板抽象的基类
#ifndef __COMMANDALIYLIFE_H
#define __COMMANDALIYLIFE_H

#include <iostream>

class CCommanDaliyLife
{
public:
    int New_Day()
    {
        return HaveBreakFast() + GetUp() + BrushTeeth();
    }
    virtual int HaveBreakFast() = 0;
    virtual int GetUp() = 0;
    virtual int BrushTeeth() = 0;
};

#endif

//子类zp的实现 
#ifndef __ZPDALIY_H
#define __ZPDALIY_H

#include "CommanDaliyLife.h"

class CZpDaliy:public CCommanDaliyLife
{
public:
    int HaveBreakFast()
    {
        return 5;
    }
    int GetUp()
    {
        return 10;
    }
    int BrushTeeth()
    {
        return 3;
    }
};

#endif

//xiao的实现
#ifndef __XIAODALIY_H
#define __XIAODALIY_H

#include "CommanDaliyLife.h"

class CXiaoDaliy:public CCommanDaliyLife
{
public:
    int HaveBreakFast()
    {
        return 10;
    }
    int GetUp()
    {
        return 15;
    }
    int BrushTeeth()
    {
        return 3;
    }   
};

#endif

//client的实现

#include <iostream>
#include "CommanDaliyLife.h"
#include "XiaoDaliy.h"
#include "ZpDaliy.h"

int main(void)
{
    CZpDaliy* zp = new CZpDaliy();
    std::cout<<"zp cost time:"<<zp->New_Day()<<std::endl;

    CXiaoDaliy* xiao = new CXiaoDaliy();
    std::cout<<"xiao const time:"<<xiao->New_Day()<<std::endl;

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值