模板模式

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

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

结果:
行为型模式-模板模式



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


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

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

相关文章: