行为型模式-模板模式
模板模式
- 一个抽象类定义了一系列基本操作(可以具体,也可以抽象),其子类可以根据自身情况具体实现父类的抽象方法,完成相似的功能。
- UML图:
例子:
抽象模板类:一样的步骤就不用写成抽象类,烧开水、倒入杯中,都是一样的
class Beverage
{
public:
void BoilWater() //步骤1
{
cout << "烧开水" << endl;
}
virtual void Brew() = 0; //步骤2
void PourInCup() //步骤3
{
cout << "倒入杯中" << endl;
}
virtual void Addcondiments() = 0;//步骤4
void Make()
{
BoilWater();
Brew();
PourInCup();
Addcondiments();
}
};
泡咖啡的具体实现
class MakeCoffee :public Beverage
{
public:
virtual void Brew()
{
cout << "冲咖啡豆" << endl;
}
virtual void Addcondiments()
{
cout << "添加牛奶" << endl;
}
};
泡茶的具体实现
class MakeTea :public Beverage
{
public:
virtual void Brew()
{
cout << "冲茶叶" << endl;
}
virtual void Addcondiments()
{
cout << "添加枸杞" << endl;
}
};
调用:
int main(void)
{
MakeCoffee* coffee = new MakeCoffee;
coffee->Make();
cout << "---------------------" << endl;
MakeTea* tea = new MakeTea;
tea->Make();
return 0;
}
结果:
- 优点:
在模板方法模式中可以通过子类来覆盖父类的基本方法,不同的子类可以提供基本方法的不同实现,更换和增加新的子类很方便,符合单一职责原则和开闭原则。
- 缺点:
需要为每一个基本方法的不同实现提供一个子类,如果父类中可变的基本方法太多,将会导致类的个数增加,系统更加庞大,设计也更加抽象。
- 使用场景:
存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同;
还没有评论,来说两句吧...