模板模式是一种行为型模式,它用来定义一个算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
-
在父类中形式化地定义一个算法,而由它的子类来实现细节的处理,在子类实现详细处理算法时并不会改变算法的执行步骤
-
复用了父类中的代码
-
在模板模式中,可以通过子类来覆盖父类的基本方法,不同的子类提供基本方法的不同实现,更换和增加新的子类很方便,符合单一职责原则和开闭原则
- 每一个不同的实现都需要一个不同的子类,导致子类过多,系统变大维护性变差
- 多个类里面有相同的逻辑
#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;
}