03-JAVA设计模式-迭代器模式

迭代器模式

什么是迭代器模式

迭代器模式(demo1.Iterator Pattern)是Java中一种常用的设计模式,它提供了一种顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示的方法。迭代器模式将遍历逻辑从聚合对象中分离出来,使得聚合对象本身更加简洁,同时也使得遍历操作更加灵活和独立。

在Java中,迭代器模式通常通过实现Iterator接口来实现。

Iterator接口定义了访问和遍历元素的方法,如hasNext()用于判断是否还有下一个元素,next()用于获取下一个元素等。

迭代器模式的主要优点包括:

  • 它支持以不同的方式遍历一个聚合对象。
  • 迭代器简化了聚合对象的接口。
  • 在同一个聚合上可以有多个遍历。
  • 在遍历的同时更改聚合对象结构是安全的。

需要注意的是,Java集合框架(Collections Framework)已经内置了迭代器模式,因此在实际开发中,我们通常会直接使用Java集合类提供的迭代器,而不需要手动实现迭代器接口。例如,ArrayList、HashSet等类都实现了Iterable接口,可以通过iterator()方法获取迭代器。

案例

实现逆向迭代

UML

实现步骤:

  • 定义迭代器接口Iterator类,类中定义判断是否还有下一个及获取下一个数据的接口
  • 定义接口实现类ReverseIterator,类中定义集合List 用于存储数据,定义游标属性用于获取当前集合所在位置, 然后实现Iterator接口

实现代码

Iterator.java

java 复制代码
// 定义迭代器接口
public interface Iterator {
    boolean hasNext();
    Object next();
}

ReverseIterator.java

java 复制代码
import java.util.List;

// 逆向迭代器具体实现方案
public class ReverseIterator implements Iterator{
    // 定义存储数据
    private List<Object> items;
    // 游标由于遍历
    private int position = 0;
    public ReverseIterator(List<Object> items) {
        this.items = items;
    }
    @Override
    public boolean hasNext() {
        return position < items.size();
    }
    @Override
    public Object next() {
        position++;
        return items.get(items.size() - position);
    }
}

TestClient.java

java 复制代码
public class TestClient {
    public static void main(String[] args) {
        List<Object> list = new ArrayList<Object>();
        list.add("1");
        list.add("2");
        list.add("3");

        ReverseIterator reverseIterator = new ReverseIterator(list);
        while(reverseIterator.hasNext()){
            System.out.println(reverseIterator.next());
        }
    }
}

执行结果:

gitee源码

git clone https://gitee.com/dchh/JavaStudyWorkSpaces.git

相关推荐
宇卿.5 分钟前
Java键盘输入语句
java·开发语言
浅念同学5 分钟前
算法.图论-并查集上
java·算法·图论
立志成为coding大牛的菜鸟.18 分钟前
力扣1143-最长公共子序列(Java详细题解)
java·算法·leetcode
鱼跃鹰飞18 分钟前
Leetcode面试经典150题-130.被围绕的区域
java·算法·leetcode·面试·职场和发展·深度优先
仙魁XAN39 分钟前
Unity 设计模式 之 创造型模式-【工厂方法模式】【抽象工厂模式】
unity·设计模式·工厂方法模式·抽象工厂模式
爱上语文2 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
serve the people2 小时前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
qmx_073 小时前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
为风而战3 小时前
IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理
java·tomcat
技术无疆5 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入