欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

状态 - 行为设计模式 - MetaTrader 5 库

author emer | 390 人阅读 | 0 人评论 |
//+------------------------------------------------------------------+
//|                                                        状态.mq5 |
//|                                    2019-2020,迪米特里·佩切里察 |
//|                                                 792112@gmail.com |
//+------------------------------------------------------------------+
//
//   状态-行为设计模式
//  
//   来自:设计模式:可重用的面向对象软件的元素
//   作者:erich gamma、richard helm、ralph johnson、john vlissides
//   发表于 1994 年
//
//   意图
//
//   允许对象在其内部状态发生变化时改变其行为。
//该对象将出现改变其类
//
//   适用性
//
//   对象的行为取决于其状态,并且它必须改变其状态
//运行时的行为取决于该状态
//   操作具有依赖于的大型、多部分条件语句
//关于对象的状态。这种状态通常由一个或多个来表示
//枚举常量。通常,多个操作将包含相同的内容
//条件结构。状态模式将条件的每个分支
//在一个单独的类中。这使您可以将对象的状态视为对象
// 就其本身而言,可以独立于其他对象而变化
//
//   结构
//  
//                       状态
//     |上下文        |o------------------>|状态   |
//     |---------------|                    |--------|
//     |Request()      |                    |句柄()|
//     |状态.Handle()|                         |
//                          +--------------------+--- - - - -
//                         ||                    |
//                  |ConcreteStateA|     |具体状态B|
//                  |--------------|     |--------------|
//                  |Handle()      |     |句柄()      |
//
//   参与者
//
//   语境
//      定义客户感兴趣的接口
//      维护一个具体状态子类的实例,该子类定义
//当前状态
//   状态
//      定义一个接口来封装相关的行为
//具有上下文的特定状态
//   具体状态子类
//      每个子类实现与状态相关的行为
//上下文
//
//   合作
//  
//   上下文将特定于状态的请求委托给当前的具体对象
//状态对象
//   上下文可以将自身作为参数传递给状态对象处理
//请求。这允许状态对象在必要时访问上下文
//   context 是客户端的主要界面。客户可以配置
//具有状态对象的上下文。一旦配置了上下文,它的客户端
//不必直接处理状态对象
//   上下文或具体状态子类可以决定哪个
//状态继承另一个状态以及在什么情况下

//+------------------------------------------------------------------+
//|客户端                                                           |
//+------------------------------------------------------------------+
#包括#包括#包括#包括空白 启动时空白)
  {
   上下文上下文(新的具体状态A);
   上下文.Request();
   上下文.Request();
  }//   输出
//  
//   上下文正在请求其状态 2097152,它将处理此上下文
//   具体状态 a (2097152) 正在处理上下文并更改上下文状态
//   上下文状态更改为:3145728
//   上下文正在请求其状态 3145728,它将处理此上下文
//   具体状态 b (3145728) 正在处理上下文并更改上下文状态
//   上下文状态更改为:4194304
//
//   结果
//  
//   它本地化特定于状态的行为并对行为进行分区
//不同的状态
//  它使状态转换变得明确
//   状态对象可以共享
//
//   执行
//
//   谁定义状态转换?
//   基于表格的替代方案
//   创建和销毁状态对象
//   使用动态继承
//
//   相关模式
//
//   享元模式解释了何时以及如何共享状态对象
//   状态对象通常是单例
//
//+------------------------------------------------------------------+



附件下载

📎 state.mq5 (4.36 KB)

📎 state.mqh (0.5 KB)

📎 context.mqh (2.04 KB)

📎 concretestatea.mqh (1.01 KB)

📎 concretestateb.mqh (1.01 KB)

Source: MQL5 #32121

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录