C++实现模板模式

概述:

模板模式是一种行为型模式,它用来定义一个算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

优点:

  1. 在父类中形式化地定义一个算法,而由它的子类来实现细节的处理,在子类实现详细处理算法时并不会改变算法的执行步骤

  2. 复用了父类中的代码

  3. 在模板模式中,可以通过子类来覆盖父类的基本方法,不同的子类提供基本方法的不同实现,更换和增加新的子类很方便,符合单一职责原则和开闭原则

缺点:

  1. 每一个不同的实现都需要一个不同的子类,导致子类过多,系统变大维护性变差

使用场景:

  1. 多个类里面有相同的逻辑

UML类图:

模板模式

实例:

#include <iostream>
// 网购
class OnlineShopping{
public:
       virtual void selectProduct() = 0;
       virtual void addToCart() = 0;
       virtual void account() = 0;
       void shopping(){
              selectProduct();
              addToCart();
              account();
       }
};
// 淘宝
class TaoBao : public OnlineShopping{
       virtual void selectProduct(){
              std::cout << "在淘宝选商品" << std::endl;
       }
       virtual void addToCart(){
              std::cout << "将商品加入淘宝购物车" << std::endl;
       }
       virtual void account(){
              std::cout << "清空淘宝购物车" << std::endl;
       }
};
// 京东
class JingDong : public OnlineShopping{
       virtual void selectProduct(){
              std::cout << "在京东选商品" << std::endl;
       }
       virtual void addToCart(){
              std::cout << "将商品加入京东购物车" << std::endl;
       }
       virtual void account(){
              std::cout << "清空京东购物车" << std::endl;
       }
};
int main(){
       OnlineShopping* shop = new TaoBao();
       shop->shopping();

       shop = new JingDong();
       shop->shopping();

       return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值