首页 > 其他分享 >迭代器模式(Iterator Pattern)

迭代器模式(Iterator Pattern)

时间:2023-06-17 19:12:34浏览次数:46  
标签:聚合 Iterator 迭代 Pattern 接口 return public

迭代器模式(Iterator Pattern)

一、定义

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

二、优缺点

优点: 1、它支持以不同的方式遍历一个聚合对象。 2、迭代器简化了聚合类。 3、在同一个聚合上可以有多个遍历。 4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。

缺点: 1、由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。

三、具体实现

3.1 原型图

  1. Iterator(迭代器):迭代器定义访问和遍历元素的接口。
  2. ConcreteIterator(具体迭代器):具体迭代器实现迭代器接口,对该聚合遍历时跟踪当前位置。
  3. Aggregate(聚合):聚合定义创建相应迭代器对象的接口。
  4. ConcreteAggregate(具体聚合):具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例。

3.2 实现
1、创建接口:

/**
 * @author zhongtao
 * @date 2023/6/17 18:48
 */
public interface Iterator {
    public boolean hasNext();

    public Object next();
}

/**
 * @author zhongtao
 * @date 2023/6/17 18:48
 */
public interface Container {
    public Iterator getIterator();
}

2、创建实现了 Container 接口的实体类。该类有实现了 Iterator 接口的内部类 NameIterator。

/**
 * @author zhongtao
 * @date 2023/6/17 18:48
 */
public class NameRepository implements Container {
   public String[] names = {"1" , "1" ,"1" , "1"};
 
   @Override
   public Iterator getIterator() {
      return new NameIterator();
   }
 
   private class NameIterator implements Iterator {
 
      int index;
 
      @Override
      public boolean hasNext() {
         if(index < names.length){
            return true;
         }
         return false;
      }
 
      @Override
      public Object next() {
         if(this.hasNext()){
            return names[index++];
         }
         return null;
      }     
   }
}

3、使用 NameRepository 来获取迭代器,并打印名字。

/**
 * @author zhongtao
 * @date 2023/6/17 18:49
 */
public class IteratorPatternDemo {

    public static void main(String[] args) {
        NameRepository namesRepository = new NameRepository();

        for (Iterator iter = namesRepository.getIterator(); iter.hasNext(); ) {
            String name = (String) iter.next();
            System.out.println("Name : " + name);
        }
    }
}

4、执行程序,输出结果:

Name : 1
Name : 2
Name : 3
Name : 4

标签:聚合,Iterator,迭代,Pattern,接口,return,public
From: https://www.cnblogs.com/zt19994/p/17488073.html

相关文章

  • 域名解析之递归查询VS迭代查询
    【大部分内容转自中科三方】DNS解析是互联网中的重要环节,承担着将域名翻译为可由计算机直接读取的IP地址的基础功能。根据查询对象不同DNS解析可分为递归解析和迭代解析两种方式什么是递归查询?“递归解析”是最常见也是默认的一种解析方式。在这种解析方式中,如果客户端配......
  • Python设计模式-20-迭代器模式
    迭代器模式是一种行为型设计模式,它允许我们按照顺序访问一个聚合对象中的元素,而不需要暴露该对象的内部表示。迭代器模式通常包括以下几个角色:迭代器(Iterator):定义了一个接口,用于按照顺序访问聚合对象中的元素。具体迭代器(ConcreteIterator):实现了迭代器定义的接口,并维护了当......
  • 迭代器与生成器总结
    参考《JavaScript高级程序设计》迭代是一种所有编程语言中都可以看到的模式。ECMAScript6正式支持迭代模式并引入了两个新的语言特性:迭代器和生成器。迭代器是一个可以由任意对象实现的接口,支持连续获取对象产出的每一个值。任何实现Iterable接口的对象都有一个Symbol.iterato......
  • 二叉搜索树迭代器
    二叉搜索树迭代器题目:实现一个二叉搜索树迭代器类BSTIterator,表示一个按中序遍历二叉搜索树(BST)的迭代器:BSTIterator(TreeNoderoot)初始化BSTIterator类的一个对象。BST的根节点root会作为构造函数的一部分给出。指针应初始化为一个不存在于BST中的数字,且该数字小于BS......
  • 对称点模式(symmetric dot pattern, SDP)-matlab版
    近年来,一种直观的信号表示方法--对称点模式(symmetricdotpattern,SDP)被用于信号分析和模式识别。与一些常规方法不同,SDP是一种基于极坐标系的图像表示方法,可以直接将原始信号转换为镜像对称雪花图像,实现简单,计算量小,且对噪声鲁棒。模式之间的识别和区分与信号之间的幅度和频率......
  • Qt编写精美输入法(历时十年迭代/可换肤/支持Qt4/5/6/win/linux/mac/嵌入式等)
    一、前言大概是从2012年就开始研究用Qt写输入法,因为项目需要,嵌入式板子上,没有对应的输入法,当初使用过很多NVR,里面也是鼠标按下弹出输入法面板进行输入,可以切换数字和字母及中文,于是借鉴着操作交互流程,用纯QWidget代码实现一个,当然最初的版本是非常简单和丑陋的,而且功能单一,能打字......
  • 用Leangoo领歌敏捷工具做迭代管理sprint
    ​什么是Sprint Backlog? Sprint Backlog是Scrum的主要工件之一。在Scrum中,团队按照迭代的方式工作,每个迭代称为一个Sprint。在Sprint开始之前,PO会准备好产品Backlog,准备好的产品Backlog应该是经过梳理、估算和优先级排列的。在Sprint开始时,第一件事情是Sprint计划会议,在Spri......
  • 对python迭代器的理解
    迭代器的接口迭代器的用法自定义迭代器迭代器的意义1迭代器的接口可迭代对象计算对象之间的共同属性得到可迭代对象的共同属性上述对象都是容器类型,都有长度加入文件对象再次求交集得到可迭代对象的唯一共同接口:_iter_生成了迭代器同样方法计算迭代器的共同......
  • 京东到家订单系统高可用架构的迭代实战
    京东到家是达达集团旗下中国最大的本地即时零售平台之一,目标就是实现一个小时配送到家的业务。一直到2019年京东到家覆盖700个县区市,合作门店近10万家,服务数千万消费者。随着订单量的增长、业务复杂度的提升,订单系统也在不断演变进化,从早期一个订单业务模块到现在分布式可扩展的高......
  • cpp: Interpreter Pattern
     /*****************************************************************//***\fileDuSimple.h*\briefInterpreterPattern解释器模式C++14*2023年6月10日涂聚文GeovinDuVisualStudio2022edit.*\authorgeovindu*\dateJune2023**********......