设计模式(八):模板模式

设计模式(八):模板模式

定义:

​ ·定义一个操作中的算法框架,将一些步骤延迟到子类中。子类在不改变框架的前提下就可以重新定义某些特定步骤

主要解决:

​ ·一些方法通用,却在每一个子类都重新写了这一方法。

如何解决:

​ ·将这些通用算法抽象出来。在抽象类实现,其他步骤在子类实现

以代码为例:

​ 关系类图如下

在这里插入图片描述

一、定义AbstractClass

#include <iostream>

/*
 * AbstractClass
 * implements a template method defining the skeleton of an algorithm
 */
class AbstractClass
{
public:
  virtual ~AbstractClass() {}
  
  void templateMethod()//该方法即为模板
  {
    // ...
    primitiveOperation1();
    // ...
    primitiveOperation2();
    // ...
  }
  
  virtual void primitiveOperation1() = 0;
  virtual void primitiveOperation2() = 0;
  // ...
};

​ 即AbstractClass抽象了通用算法primitiveOperation1() 和virtual void primitiveOperation2()。

​ 类中方法void templateMethod()即为模板

二、实现AbstractClass类

class ConcreteClass : public AbstractClass
{
public:
  ~ConcreteClass() {}
  
  void primitiveOperation1()
  {
    std::cout << "Primitive operation 1" << std::endl;
    // ...
  }
  
  void primitiveOperation2()
  {
    std::cout << "Primitive operation 2" << std::endl;
    // ...
  }
  // ...
};

三、main函数调用

int main()
{
  AbstractClass *tm = new ConcreteClass;
  tm->templateMethod();
  
  delete tm;
  return 0;
}

运行结果为:

Primitive operation 1

Primitive operation 2

模板模式优缺点

优点:

​ 1、封装不变部分,扩展可变部分。
​ 2、提取公共代码,便于维护。
​ 3、行为由父类控制,子类实现。

缺点:

​ 1、每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

注意事项:

​ 1、策略模式和模板方法模式都封装算法,一个用组合,一个用继承。

​ 2、工厂方法是模板方法的一种特殊版本。

​ 3、抽象方法由子类来实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值