c++设计模式概述之模板方法

代码写的不够规范,目的是为了缩短文章篇幅,实际中请不要这样做。

 

1、概述

  如其名,模板,也就是说,有一个已经做好的模板把框架做好了,剩下的,只需要我们将内容填充到模板下。 例如修房屋,框架结构搭建完成(模板框架搭建完成),工人砌砖(子类具体实现内容),砌砖有多种方式。

  还有,银行,对客户而言,我们的步骤是查不多一样的: 取号、排队、办理业务、评价业务(可能有)。取号和排队对每个人来说都是一样的, 办理业务和评价因人而异,A是办理取钱业务的,C是办理汇款业务的,D是办理开户业务的... 当然,评价更是因人而异。 

  模板方法 和 上面的例子就很类似,抽象类中定义了大家公有的部分( 好比银行取号排队),这些在抽象类中实现,非共有的部分由子类实现(好比银行办理业务和评价)。

  下面以银行客户业务为例。

 

2、业务流程类(抽象)

  定义了业务流程和公有的业务。

// 银行业务流程(从上到下)
class step_bank_job
{
public:
    // 取号
    virtual void get_id() { cout << "\n取号成功,请等待服务,\n"; };

    // 排队
    virtual void get_in_line() { cout << "\n正在排队,请耐心等待\n"; };

    // 办理业务(每个人要办理的业务是不一样的)
    virtual void do_job() = 0;

    // 评价业务(每个人的评价也可能不一样)
    virtual void comment(std::string str_comment) = 0;
};

 

3、因人而异的业务

  这里以取钱为例

// 取钱
class step_bank_job_withdraw : public step_bank_job
{
public:
    // 办理业务(每个人要办理的业务是不一样的)
    void do_job() { cout << "\n正在为您办理取钱业务\n"; }

    // 评价业务(每个人的评价也可能不一样)
    void comment(std::string str_comment) { cout << "\n您的宝贵意见:【" << str_comment.c_str() << "】, 感谢您的光临,祝您生活愉快\n"; }
};

 

4、调用范例

 1 void call_template()
 2 {
 3     std::unique_ptr<step_bank_job> pwithdraw(new(std::nothrow) step_bank_job_withdraw);
 4     if (!pwithdraw)
 5     {
 6         cout << "\n 您好,取钱系统故障,正在修复中....";
 7         return;
 8     }
 9 
10     // 办理业务
11     pwithdraw->get_id();
12     pwithdraw->get_in_line();
13     pwithdraw->do_job();
14     pwithdraw->comment(std::string("5星好评"));
15 }

 

5、业务办理结果:

 

posted @ 2020-08-13 11:52  mohist  阅读(178)  评论(0编辑  收藏  举报