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

迭代器模式

时间:2023-08-08 20:01:47浏览次数:33  
标签:遍历 聚合 迭代 Iterator 模式 objects public

我们登上并非我们选择的舞台,演出并非自己选择的剧本。——爱比荷泰

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

分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。

**解决:**遍历不同集合中各元素

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

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

类图如下:

upload successful

package HeadFirstDesignMode.iterator;

/**
 * 描述:迭代器模式
 */
public class IteratorPattern {

    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);
        }
    }

}

interface Iterator{
    boolean hasNext();

    Object next();
}
interface Container {
    Iterator getIterator();
}

class NameRepository implements Container {
    public String[] names = {"A" , "B" ,"C" , "D"};

    @Override
    public Iterator getIterator() {
        return new NameIterator(names);
    }
}

class NameIterator implements Iterator {
    int index;
    Object[] objects;

    public NameIterator(Object[] objects) {
        this.objects = objects;
    }

    @Override
    public boolean hasNext() {
        return index < objects.length;
    }

    @Override
    public Object next() {
        if(this.hasNext()){
            return objects[index++];
        }
        return null;
    }
}

标签:遍历,聚合,迭代,Iterator,模式,objects,public
From: https://blog.51cto.com/u_11906056/7011753

相关文章

  • 责任链模式
    **责任链模式:**使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。组成:抽象处理者角色(Handler):它定义了一个处理请求的接口。当然对于链子的不同实现,也可以在这个角色中实现后继链。......
  • SQlLite Wal 模式
    QLiteWAL(Write-AheadLogging)模式主要有以下几个优点:1.提高写入性能WAL模式将数据先写入日志文件,然后再定期更新到实际数据文件中。这避免了每次写入都要同步更新数据文件,大大提升了写入速度。2.提高并发性能WAL模式采用乐观锁并发控制,允许在同一数据库的多个连接中同......
  • mongodb副本集模式的单机部署+修改ip
    环境:OS:Centos7mongodb:4.4.22 1.解压[root@localhostsoft]#tar-xvfmongodb-linux-x86_64-rhel70-4.4.22.tgz[root@localhostsoft]#mvmongodb-linux-x86_64-rhel70-4.4.22/usr/local/services/mongodb 2.创建目录mkdir-p/home/middle/mongodb/data/mkdir-p/ho......
  • 设计模式 solid原则
    SOLID原则是一组面向对象设计和编程的原则,旨在提供可维护、可扩展和可重用的代码。下面是SOLID原则的简要介绍:单一职责原则(SingleResponsibilityPrinciple,SRP):一个类应该只有一个引起变化的原因。换句话说,一个类应该只负责一个单一的功能或职责。开放封闭原则(Open-ClosedP......
  • kube-proxy 三种模式分析
    kube-proxy三种模式分析kubernetes上面的service资源的实现方式是由kube-proxy提供的模式决定的kube-proxy提供三种模式:userspace(Kubernetes1.2版本之前)、iptables、ipvs(推荐的)如果不满足ipvs时,会自动降为iptables模式再讲三种模式前,先简单说下Service的工作原理;在......
  • 对现代电网变电运维管理模式的浅析--安科瑞张田田
    安科瑞张田田摘要:当前,随着经济建设的不断发展,我国电力企业的快速发展受到了推动。在电力企业发展过程中,变电运行维护管理是一项重要内容。管理模式的好坏直接关系到整个电网的稳定发展。因此,在现代变电运行管理过程中,需要提高管理水平,提升平平供电企业的持续稳定发展,为人民群众提供......
  • 设计模式(一)单例
    一、定义确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种创建型模式。在单例类的内部定义了一个静态对象,作为提供外部共享的唯一实例为了防止在外部对单例类实例化,它的构造函数被设为private在单例类......
  • Android之Spinner用法,key/value模式
    参考:http://www.dedeyun.com/it/m/98498.htmlhttps://blog.csdn.net/myxiaoq/article/details/258696931.key、value类,需要重写toString()方法,返回text就是Spinner要显示的keypackagecom.jay.common;publicclassSpinnerData{privateStringvalue="";private......
  • 哪种模式ip更适合你的爬虫项目?
    作为一名爬虫程序员,对于数据的采集和抓取有着浓厚的兴趣。当谈到爬虫ip时,你可能会听说过两种常见的爬虫ip类型:Socks5爬虫ip和HTTP爬虫ip。但到底哪一种在你的爬虫项目中更适合呢?本文将帮助你进行比较和选择。首先,让我们来了解一下Socks5爬虫ip和HTTP爬虫ip的基本概念和工作原理。So......
  • 虚拟机 的net模式与 桥接模式, windows可以ping通 虚拟机,但是虚拟机无法ping通 windows
    1第一个问题,net与桥接的模式。    2第二个问题,虚拟机ping不通PC,但是PC可以ping通虚拟机。  ......