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

模板方法模式是一种设计模式,它在抽象基类中定义了一个算法的框架,允许子类在不改变算法整体结构的情况下重定义算法的特定步骤。在示例中,`AbstractDrinkTemplate`是抽象模板,`Tea`和`Coffee`是子类,分别实现了制作饮品的步骤。这种模式遵循单一职责原则和开闭原则,允许扩展而无需修改原有代码。
摘要由CSDN通过智能技术生成

 模板方法模式

        定义一个操作中的算法的骨架。而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。其关键是将通用算法(逻辑)封装在抽象基类中,并将不同的算法细节放到子类中实现。

//抽象模板
class AbstractDrinkTmeplate {
public:
    //水
    virtual void water() = 0;
    //茶叶
    virtual void something() = 0;
    //混合
    virtual void mixture() = 0;

    //模板方法
    void make() {
        this->water();
        this->something();
        this->mixture();
    }
};

//茶水
class Tea :public AbstractDrinkTmeplate {
public:
    virtual void water() {
        cout << "加水" << endl;
    }
    virtual void something() {
        cout << "加茶叶" << endl;
    }
    virtual void mixture() {
        cout << "混合水与茶叶" << endl;
    }
};

//咖啡
class Coffee :public AbstractDrinkTmeplate {
public:
    virtual void water() {
        cout << "加水" << endl;
    }
    virtual void something() {
        cout << "加咖啡" << endl;
    }
    virtual void mixture() {
        cout << "混合水与咖啡" << endl;
    }
};

void test() {
    Tea* tea = new Tea;
    tea->make();
    delete tea;
    cout << "-----------------------" << endl;
    Coffee* coffee = new Coffee;
    coffee->make();
    delete coffee;
}

优点:

        父类定义算法,子类实现;子类实现的顺序不会影响算法的执行顺序

        符合单一原则与开闭原则

        子类决定某一个算法步骤是否会执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值