首页 > 其他分享 >迭代器模式-18

迭代器模式-18

时间:2023-08-04 13:23:18浏览次数:28  
标签:curr 迭代 Iterator 18 void Object 模式 obj public

概述

迭代器模式 (Iterator Pattern) 又称游标 (Cursor)。它提供了一种方式访问聚合对象中的元素而不用暴露这个对象的内部表示。

优点:符合“单一职责原则”、“开闭原则”。
缺点:增加系统复杂度。

interface Iterator {
  void first();
  void next();
  boolean hasNext();
  Object currentItem();
}

interface Aggregate {
  Iterator createIterator();
}

class Sub1Aggregate implements Aggregate {
  private Object[] obj = {};
  
  public Iterator createIterator() {
    return new Sub1Iterator();
  }
  
  private class Sub1Iterator implements Iterator {
    private int curr = 0;
   
    public void first() {
      curr = 0;
    }

    public void next() {
      if (curr < obj.length) {
        curr++;
      }
    }

    public boolean hasNext() {
      return curr != obj.length;
    }

    public Object currentItem() {
      return obj[curr];
    }
  }
}

图示:
image

参考

[1] 刘伟, 设计模式. 2011.

标签:curr,迭代,Iterator,18,void,Object,模式,obj,public
From: https://www.cnblogs.com/xdreamc/p/16466713.html

相关文章

  • GB28181转RTMP、HLS、RTSP、FLV直播
    背景GB28181协议凭借其在安防流媒体行业独有的大统一地位,目前已经在各种安防项目上使用。雪亮工程、幼儿园监控、智慧工地、物流监控等等项目上目前都需要接入安防摄像头或平台进行直播、回放。而GB28181协议作为国家推荐标准,目前基本所有厂家的安防摄像头、NVR、监控平台都支持此......
  • 4 抽象工厂方法 -- go语言设计模式
    工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。因此,可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产,这就是本文将要学习的......
  • Qt 在线程中invokeMethod采用QueuedConnection模式,调用带指针参数槽,实际不会调用
    widgetObject有操函数Test:voidTest(int*v);在线程中调用Test,会被忽略,实际不会调用。QMetaObject::invokeMethod(widgetObject,"Test",Qt::QueuedConnection,Q_ARG(int*,&v));下面是网上找的理由: 在同一个线程中当信号和槽都在同一个线程中时,值传递参数和引用传递参数有......
  • ftp的主动模式,非20数据端口
    某银行之间ftp文件传输,修改了模式端口21,改成1021,数据传输端口就变成了1020,就是ftp端口-1FTP协议使用两个端口来处理数据传输:一个用于命令(默认为21),另一个用于数据(默认为20)。当你改变命令端口时,这并会影响数据端口。在主动模式下,FTP服务器会从它的数据端口(默认是20)向客户端的一......
  • Redis从入门到放弃(8):哨兵模式
    在前面的文章中介绍了Redis的主从复制,但主从复制存在一定的缺陷。如果Master节点宕机,因为不具备自动恢复功能,需要人工干预,那么在这个干预过程中Redis将不可用。为了解决这一问题,Redis官方推荐一种高可用方案:哨兵模式(Sentinel)。1、什么是哨兵模式?哨兵模式是Redis的高可用解决方案......
  • RTSP/RTMP/GB28181协议视频监控平台搭建之国网B接口协议介绍
    一、介绍电网视频监控系统和接口为企业标准,目的是为了实现统一监控,统一存储,分级控制,分域管理,使不同的视频监控系统能够互联互通。系统组成视频监控系统是以视频监控平台为核心。视频监控铜牌中的基本设备是一个或多个提供业务的服务器。视频监控平台之间通过IP网络互联互通。视频监......
  • 设计模式-纯文字描述
    设计模式在很多面试题中经常出现,同时,在写大型项目中,设计模式可以让代码更简洁,架构更合理,所以是我们必须要掌握的。 1、观察者模式观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。一般需要以下几步:1、定义多个......
  • Redis从入门到放弃(8):哨兵模式
    在前面的文章中介绍了Redis的主从复制,但主从复制存在一定的缺陷。如果Master节点宕机,因为不具备自动恢复功能,需要人工干预,那么在这个干预过程中Redis将不可用。为了解决这一问题,Redis官方推荐一种高可用方案:哨兵模式(Sentinel)。1、什么是哨兵模式?哨兵模式是Redis的高可用解决方......
  • Codeforces 1855B:Longest Divisors Interval 最长的连续约数区间
    1855B.LongestDivisorsIntervalDescription:对于一个整数\(n\)\((1\leqn\leq10^{18})\),找到一段最长的区间\([l,r]\),使得区间内所有数均为\(n\)的约数。Analysis:如果\(n\)是一个奇数(非\(2\)的倍数),由于\(odd=odd\timesodd\),则不可能有连续的两个整数均为......
  • 设计模式原则之:开闭原则原则
     类似于做一个多支付的业务,提供一个service来进行支付、查询操作,具体的实现类如:WeChat、AliPay等实现service服务,来进行服务的调用,如果后续增加Paypal支付,则由提供方实现service即可使用方无需动代码引发开闭原则的实例/***@description:引发开闭原则的示例*@author:......