C++设计模式浅识模板方法模式

原创 2016年06月01日 06:43:00

模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

适用的一个时机:当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。

模板方法的两个角色:

  1. 抽象类(AbstractClass): 给出顶级逻辑的框架
  2. 具体产品类(ConcreteClass):实现父类所定义时的一个或多个抽象方法。一个AbstractClass可以有多个ConcreteClass

结构图:

测试用例:

int main(){
    AbstractClass *pAbstractA = new ConcreteClassA;
    pAbstractA->TemplateMethod();  //Output: ConcreteA Operation1 ConcreteA Operation2

    AbstractClass *pAbstractB = new ConcreteClassB;
    pAbstractB->TemplateMethod();   //Output: ConcreteB Operation1 ConcreteB Operation2

    if(pAbstractA) delete pAbstractA;
    if(pAbstractB) delete pAbstractB;

    return 0;
}

模板方法实现:

class AbstractClass{
public:
    void TemplateMethod(){  //统一的对外一个接口
        PrimitiveOperation1();
        PrimitiveOperation2();
    }
protected:
    virtual void PrimitiveOperation1(){  //原始操作1
        std::cout << "Default Operation1\n";
    }
    virtual void PrimitiveOperation2(){  //原始操作2
        std::cout << "Default Operation2\n";
    }
};

class ConcreteClassA: public AbstractClass{
protected:
    //重载方法1和2
    virtual void PrimitiveOperation1(){
        std::cout << "ConcreteA Operation1\n";
    }
    virtual void PrimitiveOperation2(){
        std::cout << "ConcreteA Operation2\n";
    }
};

class ConcreteClassB: public AbstractClass{
protected:
    virtual void PrimitiveOperation1(){
        std::cout << "ConcreteB Operation1\n";
    }
    virtual void PrimitiveOperation2(){
        std::cout << "ConcreteB Operation2\n";
    }
};

模板方法特点:

  1. 模板方法模式是通过把不变行为搬移到父类,去除子类中的重复代码来体现它的优势。
  2. 模板方法模式就是提供了一个很好的代码复用平台。
版权声明:本文为博主原创文章,转载请注明出处。

【设计模式】——原型模式VS模板方法模式

不知道何种原因总是把原型模式和模板方法模式搞混,着实很苦恼啊!不知道大家是否有同样的困扰,有的话治疗,没有的话预防啊。故该文章进行详细对比学习! 原型模式     所谓的原型模式:用原型实例指定创建对...
  • jiadajing267
  • jiadajing267
  • 2015年11月02日 19:47
  • 1017

C++设计模式浅识建造者模式

建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。模式实现:class Builder; //产品 class Product{ public: ...
  • JarrettLife
  • JarrettLife
  • 2016年06月25日 10:56
  • 213

C++设计模式浅识职责链模式

职责链模式(ChainOfResponsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止...
  • JarrettLife
  • JarrettLife
  • 2016年06月25日 09:46
  • 216

C++设计模式浅识访问者模式

访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作,它使你可你在不改变各元素类的前提下定义作用于这些元素的新操作。五个角色类: Visitor:为该对象结构中ConcreteEle...
  • JarrettLife
  • JarrettLife
  • 2016年07月01日 19:23
  • 293

C++设计模式浅识桥接模式

合成/聚合都用原则(CARP): 优先使用合成/聚合,而不是使用类继承。聚合表示一种弱的”拥有关系”,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。 合成表示一种强的”拥有关系”,体现...
  • JarrettLife
  • JarrettLife
  • 2016年06月23日 19:43
  • 304

C++设计模式浅识装饰模式

装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。 装饰模式的四个角色: 组件类:Component 具体组件类:ConereteComponent 装饰类:...
  • JarrettLife
  • JarrettLife
  • 2016年05月20日 22:31
  • 464

C++设计模式浅识原型模式

定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。原型模式主要考虑的深复制与浅复制,在C++的类...
  • JarrettLife
  • JarrettLife
  • 2016年05月26日 19:07
  • 292

C++设计模式浅识单例模式

什么是单例模式? 保证一个类只有一个实例,并提供一个访问它的全局访问点。【DP】 让类的自身负责保存它的唯一实例,这个类保证没有其他实例可以被创建,并且此类可以提供一个访问该实例的方法。【DP】 ...
  • JarrettLife
  • JarrettLife
  • 2016年05月15日 11:43
  • 332

C++设计模式浅识适配器模式

适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。何时使用适配器模式: 两个类所做的事情相同或相似,...
  • JarrettLife
  • JarrettLife
  • 2016年06月25日 11:23
  • 176

C++设计模式浅识观察者模式

观察者模式(Observer):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主体对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。模式实现://观察者抽象...
  • JarrettLife
  • JarrettLife
  • 2016年06月25日 11:03
  • 190
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++设计模式浅识模板方法模式
举报原因:
原因补充:

(最多只允许输入30个字)