zoukankan      html  css  js  c++  java
  • Design Patterns(十七):Iterator PatternVB代码

    结构图

     

    角色

    • 迭代器(Iterator)角色:负责定义和遍历元素的接口。
    • 具体迭代器(Concrete Iterator)角色:实现迭代器接口,并要记录遍历中的当前位置。  
    • 容器(Container)角色:容器角色负责提供创建具体迭代器角色的接口。
    • 具体容器(Concrete Container)角色:具体容器角色实现创建具体迭代器角色的接口——这个具体迭代器角色于该容器的结构相关。

    动机

      在软件构建过程中集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部程序代码透明的访问其中包含的元素;  同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作” 提供了可能。
        使用面向对象技术将这种遍历机制抽象抽象为“迭代器”为“应对变化中的集合对象”提供了一种优雅的方式。

    意图

      
    提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

    示意性代码

    示意性代码

     一个实例

     下面的迭代器代码用来演示跳过某些项目遍历一个集合。

    实例代码

    Iterator Pattern模式的几个要点:
       1、迭代抽象:访问一个聚合对象的内容而无需暴露它的内部信息。
       2、迭代多态:为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作。
       3、迭代器健壮性考虑:遍历的同时更改迭代器所在的集合结构,会导致问题。

    我的理解

    封装集合对象的内部结构和遍历集合的算法,支持集合和算法的变化。

    参考资料
    《C#面向对象设计模式纵横谈系列课程(18)》     李建中老师


  • 相关阅读:
    【先定一个小目标】在Windows下的安装Elasticsearch
    【先定一个小目标】Windows下Redis的安装使用
    【.net core 跨平台】第一步 在Ubuntu16.04 配置.net core环境
    Caf.CMS是一个免费的、 开源,功能齐全的CMS
    使用MicroService4Net 快速创建一个简单的微服务
    记录-div绝对定位针对手机浏览器的区别
    OS X 下不通过Homebrew安装ASP.NET 5开发环境
    结合谷歌地图多边形(polygon)与Sql Server 2008的空间数据类型计算某个点是否在多边形内的注意事项
    插入排序
    修复lvm的逻辑卷
  • 原文地址:https://www.cnblogs.com/sekihin/p/Iterator_Pattern.html
  • Copyright © 2011-2022 走看看
    Creative Commons License 本作品采用 知识共享署名-非商业性使用 2.5 中国大陆许可协议进行许可。