前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >行为型之模板方法C++实现

行为型之模板方法C++实现

作者头像
用户9831583
发布2022-06-16 15:42:29
1920
发布2022-06-16 15:42:29
举报
文章被收录于专栏:码出名企路

生活需求:去银行办理业务经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。

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

优势:

  1. 封装了不变部分,扩展可变部分。
  2. 在父类中提取了公共的部分代码,便于代码复用。

缺点:

  1. 对每个不同的实现都需要定义一个子类,会导致类的个数增加。
  2. 父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度。

主要角色:

(1)抽象父类:

  • 抽象方法:在抽象类中申明,由具体子类实现。
  • 具体方法:在抽象类中已经实现,在具体子类中可以继承或重写它。
  • 钩子方法:在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。

(2)具体子类:实现抽象类中所定义的抽象方法和钩子方法。

具体案例:

小码路最近买彩彩票中了30万,随机存入银行,朋友知道后,借了20万,真是树大招风呀,于是小码路给朋友转过去了,朋友屁颠屁颠取走了20万!故事纯属虚构哈,我也想天上掉馅饼哦。就靠小伙伴们了哈!

第一步:抽象父类

代码语言:javascript
复制
#pragma once
#include <iostream>
using namespace std;

class Bank
{
    public:
        void QuHao()
        {
            cout<<"请前排取号"<<endl;
        }
        void PingJia()
        {
            cout<<"请对本次服务进行评价"<<endl;
        }
        virtual void CaoZuo()=0;

        void Process()
        {
            this->QuHao();
            this->CaoZuo();
            this->PingJia();
        }

};

第二步:具体子类

代码语言:javascript
复制
//因人而异
class Deposit:public Bank
{
    public:
        void CaoZuo()
        {
            cout<<"小码路存入银行30万!"<<endl;
        }
};

class Transfer:public Bank
{
    public:
        void CaoZuo()
        {
            cout<<"小码路向朋友转账20万!"<<endl;
        }
};
class Withdraw:public Bank
{
    public:
        void CaoZuo()
        {
            cout<<"小码路的朋友取走20万!"<<endl;
        }
};

第三步:客户端

代码语言:javascript
复制
#include "bank.h"

int main()
{
    Bank *bank=new Deposit();
    bank->Process();
    delete bank;

    Bank *bank1=new Transfer();
    bank1->Process();
    delete bank1;

     Bank *bank2=new Withdraw();
    bank2->Process();
    delete bank2;

    return 0;
}

结果显示:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码出名企路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档