设计模式--模板方法模式

1、模板方法模式的定义

    

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


2、模板方法模式的类图结构


3、模式的优缺点及适用情况

        模板方法模式是通过把不变的行为搬移到超类,去除子类中的重复代码,从而提供了一个很好的代码复用平台。有时候,我们会遇到有一系列步骤构成的过程需要执行。这个过程从高层次上看是相同的,但有些步骤的实现可能不同。这个时候我们通常就应该考虑用模板方法模式。


4、应用举例

        

例如有一家专业生产饲料的工厂,他们同时能接收生产猪饲料和狗粮的订单进行生产。虽然对于养猪场厂长和家庭铲屎官来说,猪饲料和狗粮相差十万八千里,但是对于饲料厂来说,可能差别就没那么大了。单从生产饲料的流程上来说,每一种饲料的生产过程都大致分为配料、搅拌、制饼、大包装袋四个过程。只不过具体细节会因为生产对象的不同而有所差异而已。这种总体步骤一致,只是具体因为子类的不同而有所差异的情况就可用模板方法模式来实现。其类图和代码如下:


#include<iostream>
using namespace std;

class Feed{
public:
    void productionProcess();
    virtual void mixIngredients() = 0;
    void mix() ;
    void form() ;
    void pack();
};

void Feed::productionProcess(){
    mixIngredients();
    mix();
    form();
    pack();
}

void Feed::mix(){
    cout<<"猪饲料狗饲料反正都是搅一搅!"<<endl;
}

void Feed::form(){
    cout<<"猪饲料狗饲料反正都是做成饼!"<<endl;
}

void Feed::pack(){
    cout<<"猪饲料狗饲料反正都是装成袋!"<<endl;
}

class PigFeed:public Feed{
public:
    virtual void mixIngredients();
};

void PigFeed::mixIngredients(){
    cout<<"玉米加红薯,成就专业小猪饲料!"<<endl;
}

class DogFeed:public Feed{
public:
    virtual void mixIngredients();
};

void DogFeed::mixIngredients(){
    cout<<"牛肉加面粉,成就专业精品狗粮!"<<endl;
}

int main(){
    Feed* feed1 = new PigFeed();
    Feed* feed2 = new DogFeed();
    feed1->productionProcess();
    cout<<"************美味分隔符**************"<<endl;
    feed2->productionProcess();

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值