首页 > 编程语言 >C++ 设计模式之模板方法模式

C++ 设计模式之模板方法模式

时间:2023-07-07 14:55:35浏览次数:43  
标签:子类 C++ 算法 模式 设计模式 方法 模板

设计模式之模板方法模式
  模板方法模式,定义一个操作中的算法的股价,而将一些步骤延迟到了子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。说白了就是有一个算法有很多部分,这个算法在基类中已经定义好了。而算法中的各个部分都写成各个成员函数了。然后在子类中可以覆盖这些成员函数,从而实现不同的算法。

其UML图如下:

在AbstractClass中有个TemplateMethod()方法,该方法定义了一个算法,在该算法中调用了其他的成员方法,这些成员方法组成了整个算法的各个部分。而这这些成员方法则可以根据子类的不同实现而可以改变。

示例代码如下:

 1 // TemplateModel.h文件
 2 #pragma once
 3 #include <iostream>
 4 
 5 class AbstractClass
 6 {
 7 public:
 8     // 定义了一个算法模板
 9     void templateMethod()
10     {
11         std::cout << "Operation 0" << std::endl;
12         primitiveOperation_0();
13         std::cout << "Operation 1" << std::endl;
14         primitiveOperation_1();
15     }
16 protected:
17     virtual void primitiveOperation_0() = 0;
18     virtual void primitiveOperation_1() = 0;
19 };
20 
21 class ConcreteClass_0 : public AbstractClass
22 {
23 protected:
24     virtual void primitiveOperation_0()
25     {
26         std::cout << "ConcreteClass_0 Operation_0" << std::endl;
27     }
28     virtual void primitiveOperation_1()
29     {
30         std::cout << "ConcreteClass_0 Operation_1" << std::endl;
31     }
32 };
33 
34 class ConcreteClass_1 : public AbstractClass
35 {
36 protected:
37     virtual void primitiveOperation_0()
38     {
39         std::cout << "ConcreteClass_1 Operation_0" << std::endl;
40     }
41     virtual void primitiveOperation_1()
42     {
43         std::cout << "ConcreteClass_1 Operation_1" << std::endl;
44     }
45 };

测试代码如下:

 1 #include <iostream>
 2 #include "TemplateModel.h"
 3 
 4 int main()
 5 {
 6     using namespace std;
 7     // 模板方法模式
 8     AbstractClass *p = new ConcreteClass_0();
 9     p->templateMethod();
10     delete p;
11 
12     p = new ConcreteClass_1();
13     p->templateMethod();
14     delete p;
15 
16     getchar();
17     return 0;
18 }

测试结果如下图:

  模板方法模式就是提供了一个很好的代码复用平台。因为有时候,我们会遇到由一系列步骤构成的过程需要执行。这个过程从高层次上看是相同的,但是有些步骤实现可能不同。这时候,我们通常就应该要考虑用模板方法类了。也就是说,当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一的地方,这样帮助子类摆脱重复的不变行为的纠缠。

标签:子类,C++,算法,模式,设计模式,方法,模板
From: https://www.cnblogs.com/ybqjymy/p/17534977.html

相关文章

  • JAVA设计模式之模板模式
    设计模式设计模式(DesignPattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、......
  • C++ 设计模式之备忘录模式
    设计模式之备忘录模式备忘录,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。该模式很好理解,其UML图如下:在Originator中提供了创建Memento的接口,具体要保存什么样的内容,则根据需求来定。而Caretake......
  • C++ 设计模式之责任链模式
    设计模式之责任链模式责任链模式,使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象练成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。该模式很好理解,其UML图如下: 每个ConcreteHandler都有一定的请求处理能力,当自己处理不了的时......
  • C++ 设计模式之中介者模式
    设计模式之中介者模式中介者模式,用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地互相引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。该模式很好理解,其UML图如下: Mediator中每个交互者的引用,在Mediator内部封装了各种类之间的交互。至于那个类......
  • C++ 设计模式之享元模式
    设计模式之享元模式享元模式,运用共享技术有效地支持大量细粒度的对象。面向对象技术可以很好地解决一些灵活性或扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导致运行代价过高,带来性能下降等问题。享元模式正式为了解决这依赖问题而诞生的。......
  • C++ 设计模式之解释器模式
    设计模式之解释器模式解释器模式,给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式解决的问题是,如果一种特定类型的问题发生的频率足够高,那么可能就只得将该问题的各个示例表述为一个简单语言中的句子。这样就可以构建......
  • C/C++数据结构与算法课程设计[2023-07-06]
    C/C++数据结构与算法课程设计[2023-07-06]数据结构与算法课程设计一、课程设计的目的、要求和任务 本课程设计是为了配合《数据结构与算法》课程的开设,通过设计完整的程序,使学生掌握数据结构的应用、算法的编写等基本方法。1.课程的目的(1)使学生进一步理解和掌握课堂上所学......
  • C++ 设计模式之简单工厂模式
    设计模式之简单工厂模式(C++)简单工厂模式,主要用于创建对象。新添加类时,不会影响以前的系统代码。核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。优点:适用于不同情况创建不同的类时。缺点:客户端必须要知道基类和工厂类,耦合性差......
  • C++ 设计模式之组合模式
    设计模式之组合模式组合模式,将对象组合成属性结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。其UML图如下:一个组织有很多子组织,而无论子组织是单独一个部门或是一个分组织。该组织都希望把它们当成一样的子组织来管理。......
  • C++ 设计模式之单例模式
    设计模式之单例模式保证一个类仅有一个实例,并提供一个访问他的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且可以提供一个访问该实例......