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

迭代器 - 行为设计模式 - MetaTrader 5 库

author emer | 811 人阅读 | 0 人评论 |
//+------------------------------------------------------------------+
//|                                                201021_113117.mq5 |
//|                                    2019-2020,迪米特里·佩切里察 |
//|                                                 792112@gmail.com |
//+------------------------------------------------------------------+
//   来自:设计模式:可重用的面向对象软件的元素
//   作者:gof:erich gamma、richard helm、ralph johnson、john vlissides
//   发表于 1994 年
//+------------------------------------------------------------------+
//|迭代器 - 行为设计模式                            |
//+------------------------------------------------------------------+
//  提供一种访问聚合对象元素的方法
// 按顺序进行而不暴露其底层表示
//+------------------------------------------------------------------+
//|适用性                                                   |
//+------------------------------------------------------------------+
//   访问聚合对象的内容而不暴露其内容
// 内部表示
//   支持聚合对象的多次遍历
//   提供统一的接口来遍历不同的聚合
// 结构体(即支持多态迭代)
//+------------------------------------------------------------------+
//|结构                                                        |
//+------------------------------------------------------------------+
//
//         |    聚合 |<------|客户端|----->|   迭代器|
//         |----------------|                       |-------------|
//         |CreateIterator()|                       |首先()      |
//                 ^                                |下一个()       |
//                 |                                |IsDone()     |
//                 |                                |当前项目()|
//                 |                                       ^
//                 |                                       |
//|             具体             |- - - - - - - ->|具体|
//|            聚合             |<---------------|迭代器|
//|----------------------------------|
//|CreateIterator()                  |
//|返回新的ConcreteIterator(this)|
//
//+------------------------------------------------------------------+
//|参与者                                                     |
//+------------------------------------------------------------------+
//   迭代器
//      定义用于访问和遍历元素的接口
//   总计的
//      定义用于创建迭代器对象的接口
//   具体迭代器
//      实现迭代器接口
//      跟踪遍历中的当前位置
// 总计的
//   混凝土骨料
//      实现迭代器创建接口以返回
// 正确的具体迭代器的实例
//+------------------------------------------------------------------+
//|合作                                                   |
//+------------------------------------------------------------------+
//   一个具体的迭代器跟踪当前对象
// 聚合并可以计算遍历中的后续对象                                       |
//---迭代器参与者
#包括201021_104101.mqh>//迭代器
#包括201021_104329.mqh>//总计的
#包括201021_104505.mqh>//具体迭代器
#包括201021_104755.mqh>//混凝土骨料
//---
空白 启动时()
  {
   合计<细绳>* 聚合=新的混凝土骨料;
   合计+=“元素a”;
   合计+=“元素b”;
   合计+="element c";
   合计+=“元素d”;//---   迭代器<细绳>* iterator=aggregate.CreateIterator();
  为了(iterator.First(); !iterator.IsDone(); iterator.Next())
     {
      打印(迭代器.CurrentItem());
     }//---  删除总计的;
  删除迭代器;
  }//+------------------------------------------------------------------+
//|输出                                                            |
//+------------------------------------------------------------------+
//   聚合的第一次迭代
//   元素a
//   聚合的下一次迭代
//   元素 b
//   聚合的下一次迭代
//   元素 c
//   聚合的下一次迭代
//   元素 d
//+------------------------------------------------------------------+
//|后果                                                    |
//+------------------------------------------------------------------+
//  它支持聚合遍历的变化
//      要改变遍历算法只需替换迭代器
// 具有不同实例的实例
//      您还可以定义迭代器子类来支持新的遍历
//   迭代器简化聚合接口
//   聚合上可以有多个待处理的遍历
//+------------------------------------------------------------------+
//|实施                                                   |
//+------------------------------------------------------------------+
//   谁控制迭代?
//   谁定义了遍历算法?
//   迭代器的鲁棒性如何?
//   额外的迭代器操作
//   在 C++ 中使用多态迭代器
//   迭代器可能具有特权访问权限
//   复合迭代器
//   空迭代器
//+------------------------------------------------------------------+



附件下载

📎 201021_113117.mq5 (5.54 KB)

📎 201021_104101.mqh (0.86 KB)

📎 201021_104329.mqh (0.9 KB)

📎 201021_104505.mqh (3.04 KB)

📎 201021_104755.mqh (2.43 KB)

Source: MQL5 #31579

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