新版MQL语言程序设计:模板方法模式的原理、应用及代码实现

文章目录

    • 一、什么是模板方法模式
    • 二、模板方法模式的实现原理
    • 三、模板方法模式的应用场景
    • 四、模板方法模式的代码实现

一、什么是模板方法模式

模板方法模式是一种行为设计模式,它定义了一个算法的骨架,将一些步骤的实现延迟到子类中。在模板方法模式中,一个抽象类公开定义了执行算法所需的方法,其中的某些方法可以有默认实现,而其他方法则需要在具体子类中实现。核心思想就是固定算法结构,具体步骤在子类中实现。可确保算法的一致性,同时又能灵活扩展和定制算法。

二、模板方法模式的实现原理

  1. 定义一个抽象类,作为算法的骨架。该抽象类中包含了一个模板方法,用于定义算法的结构。
  2. 在抽象类中定义一些抽象方法,这些方法由子类来实现,用于定义算法中可变的部分。
  3. 在抽象类中实现一些具体方法,这些方法在算法中是固定的,不需要子类来实现。
  4. 子类继承抽象类,并实现其中的抽象方法,从而完成算法的定制。
  5. 通过模板方法模式,可以将算法的通用部分放在抽象类中实现,而将可变的部分延迟到子类中实现。这样可以提高代码的复用性和可扩展性。

三、模板方法模式的应用场景

  • 框架设计:在框架设计中,模板方法模式常用于定义框架的算法骨架,而将具体的实现细节留给子类来完成。这样可以保证框架的稳定性和一致性,同时也提供了灵活性,使得框架可以根据不同的需求进行扩展和定制。
  • 流程控制:在一些流程控制的场景中,模板方法模式可以用于定义流程的执行顺序和步骤,而将具体的步骤实现交给子类来完成。这样可以保证流程的一致性,并且可以根据需要灵活地定制流程中的某些步骤。
  • 算法实现:在一些算法实现的场景中,模板方法模式可以用于定义算法的整体结构,而将具体的算法细节留给子类来实现。这样可以提高代码的复用性和可维护性,同时也方便了算法的定制和扩展。

四、模板方法模式的代码实现

//   structure
//      
//                  |    AbstractClass     |
//                  |----------------------|
//                  |TemplateMethod()      |
//                  | ...                  |
//                  | PrimitiveOperation1()|
//                  | ...                  |
//                  | PrimitiveOperation2()|
//                  | ...                  |
//                  |PrimitiveOperation1() |
//                  |PrimitiveOperation2() |
//                             ^
//                             |
//                  |    ConcreteClass    |
//                  |---------------------|
//                  |PrimitiveOperation1()|
//                  |PrimitiveOperation2()|
class AbstractClass
{
    public:
        virtual void      PrimitiveOperation1(void)=0;
        virtual void      PrimitiveOperation2(void)=0;
        virtual void      TemplateMethod(void);
};
//+------------------------------------------------------------------+
//|                                                  template method |
//+------------------------------------------------------------------+
void AbstractClass::TemplateMethod(void)
{
    Print("abstract template method requested");
    PrimitiveOperation1();
    PrimitiveOperation2();
}
//
class ConcreteClass : public AbstractClass
{
    public:
        void              PrimitiveOperation1(void);
        void              PrimitiveOperation2(void);
};
//+------------------------------------------------------------------+
//|                                            primitive operation 1 |
//+------------------------------------------------------------------+
void ConcreteClass::PrimitiveOperation1(void)
{
    Print("executing concrete primitive operation 1");
}
//+------------------------------------------------------------------+
//|                                            primitive operation 2 |
//+------------------------------------------------------------------+
void ConcreteClass::PrimitiveOperation2(void)
{
    Print("executing concrete primitive operation 2");
}
void OnStart()
{
    AbstractClass* instance=new ConcreteClass();
    instance.TemplateMethod();
    delete instance;
}

你可能感兴趣的:(新版MQL语言程序设计,模板方法模式,设计模式,MT4,MT5,MQL,学习,笔记)