迭代器 - 行为设计模式 - MetaTrader 5 库
//+------------------------------------------------------------------+ //| 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小时后评论,即可解锁附件下载
立即登录
