行为型模式-模板模式

╰半橙微兮° 2022-05-10 15:42 278阅读 0赞

模板模式

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

例子:

抽象模板类:一样的步骤就不用写成抽象类,烧开水、倒入杯中,都是一样的

  1. class Beverage
  2. {
  3. public:
  4. void BoilWater() //步骤1
  5. {
  6. cout << "烧开水" << endl;
  7. }
  8. virtual void Brew() = 0; //步骤2
  9. void PourInCup() //步骤3
  10. {
  11. cout << "倒入杯中" << endl;
  12. }
  13. virtual void Addcondiments() = 0;//步骤4
  14. void Make()
  15. {
  16. BoilWater();
  17. Brew();
  18. PourInCup();
  19. Addcondiments();
  20. }
  21. };

泡咖啡的具体实现

  1. class MakeCoffee :public Beverage
  2. {
  3. public:
  4. virtual void Brew()
  5. {
  6. cout << "冲咖啡豆" << endl;
  7. }
  8. virtual void Addcondiments()
  9. {
  10. cout << "添加牛奶" << endl;
  11. }
  12. };

泡茶的具体实现

  1. class MakeTea :public Beverage
  2. {
  3. public:
  4. virtual void Brew()
  5. {
  6. cout << "冲茶叶" << endl;
  7. }
  8. virtual void Addcondiments()
  9. {
  10. cout << "添加枸杞" << endl;
  11. }
  12. };

调用:

  1. int main(void)
  2. {
  3. MakeCoffee* coffee = new MakeCoffee;
  4. coffee->Make();
  5. cout << "---------------------" << endl;
  6. MakeTea* tea = new MakeTea;
  7. tea->Make();
  8. return 0;
  9. }

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


  • 优点:
       在模板方法模式中可以通过子类来覆盖父类的基本方法,不同的子类可以提供基本方法的不同实现,更换和增加新的子类很方便,符合单一职责原则和开闭原则。
  • 缺点:
      需要为每一个基本方法的不同实现提供一个子类,如果父类中可变的基本方法太多,将会导致类的个数增加,系统更加庞大,设计也更加抽象。
  • 使用场景:
        存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同;

发表评论

表情:
评论列表 (有 0 条评论,278人围观)

还没有评论,来说两句吧...

相关阅读

    相关 【设计模式行为模板方法模式

    模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。属于行为性设计模式。 这

    相关 行为--模板模式

    概念 -------------------- 用一个抽象类定义一些方法作为实现某个功能的模板(一般设为final),并将模板方法中某些步骤的实现推迟到子类中,使子类可