C++设计模式程序员

【C++设计模式】模板方法模式

2021-02-02  本文已影响0人  小鱼号的代码日记
/*设计模式
 * 模板方法
 * 定义一个操作中算法的框架
 * 而将一些步骤延迟到子类中。
 * 使得子类可以在不改变一个算法的结构
 * 即可重定义该算法的某些特定步骤。
 * 现实中的例子
 * 网购的方法分为
 * 下单,付款,发货,收货。
 * 缺点:
 * 需要每一个基本方法的不同实现提供一个子类
 * 如果父类中可变的基本方法太多,将会导致类的个数
 * 增加,系统更加庞大,设计也更加抽象
 */
#include<iostream>
using namespace std;


class OnlineShopping
{
public:
    virtual void Order() = 0;
    virtual void Pay() = 0;
    virtual void SendGoods() = 0;
    virtual void RecvGoods() = 0;
    void shopping()
    {
        Order();
        Pay();
        SendGoods();
        RecvGoods();
    }
};

class JDOnlineShopping :public OnlineShopping
{
public:
    void Order()
    {
        cout << "jd order" << endl;
    }
    void Pay()
    {
        cout << "wechat pay" << endl;
    }
    void SendGoods()
    {
        cout << "jd logistics send googs" << endl;
    }
    void RecvGoods()
    {
        cout << "recv goods from jd logistics" << endl;
    }
};

class TaoBaoOnlineShopping :public OnlineShopping
{
public:
    void Order()
    {
        cout << "tmall order" << endl;
    }
    void Pay()
    {
        cout << "zhifubao pay" << endl;
    }
    void SendGoods()
    {
        cout << "cainiao logistics send googs" << endl;
    }
    void RecvGoods()
    {
        cout << "recv goods from cainiao logistics" << endl;
    }
};

void testTemplateMethod()
{
    cout << "TemplateMethod:" << endl;
    OnlineShopping* pShopping = new JDOnlineShopping;
    pShopping->shopping();

    pShopping = new TaoBaoOnlineShopping;
    pShopping->shopping();
}
上一篇下一篇

猜你喜欢

热点阅读