行为型模式-模板模式

模板模式

  • 一个抽象类定义了一系列基本操作(可以具体,也可以抽象),其子类可以根据自身情况具体实现父类的抽象方法,完成相似的功能。

  • 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;
}

结果:
在这里插入图片描述



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


  • 缺点:
      需要为每一个基本方法的不同实现提供一个子类,如果父类中可变的基本方法太多,将会导致类的个数增加,系统更加庞大,设计也更加抽象。

  • 使用场景:
        存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值