Java设计模式 _行为型模式_迭代器模式

一、迭代器模式

1、迭代器模式

迭代器模式(Iterator Pattern)是一种行为型设计模式,用于顺序访问集合对象的元素,不需要关心集合对象的底层表示。如:java中的Iterator接口就是这个工作原理。

2、实现思路

(1)、定义表达式的规范(一般就是:hasNext,getNext)

(2)、编写实现类,实现该规范接口。(可以用过index索引来校验)

(3)、编写新的容器类,内置实现类和集合类,通过调用容器内部的实现类来获取容器内部集合属性的元素。

二、代码示例

1、示例场景

编写迭代器,通过迭代器的方法获取和校验下一个元素。
2、代码示例

java 复制代码
// 1、编写规范类
public interface Iterator1 {
    Object getNext();
    boolean hasNext();
}
// 2、编写实现类迭代器
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;

public class ListIterator implements Iterator1 {
    List<Object> objectList;
    private int index = 0;

    public ListIterator(List<Object> objectList) {
        if (CollectionUtils.isEmpty(objectList)) {
            this.objectList = new ArrayList<>();
        } else {
            this.objectList = objectList;
        }
    }

    @Override
    public Object getNext() {
        Object obj = null;
        if (hasNext()) {
            obj = objectList.get(index);
            index++;
        }
        return obj;
    }

    @Override
    public boolean hasNext() {
        if (index < objectList.size()) {
            return true;
        }
        return false;
    }
}
// 3、自定义容器,内置迭代器,通过迭代器获取集合元素
import lombok.Data;
import java.util.ArrayList;
import java.util.List;

@Data
public class MyContainer {
    private List<String> nameList;
    private ListIterator listIterator;

    public MyContainer(List<String> list) {
        this.nameList = list;
        listIterator = new ListIterator(new ArrayList<>(list));
    }
}
// 4、测试
public static void main(String[] args) {
        List<String> nameList = new ArrayList<>();
        nameList.add("zhangsan");
        nameList.add("lisi");
        nameList.add("wangwu");
        MyContainer myContainer = new MyContainer(nameList);

        ListIterator myIterator = myContainer.getListIterator();
        while (myIterator.hasNext()){
            System.out.println(myIterator.getNext());
        }
    }

运行结果:

可以看到已经遍历打印了所有的元素。

总结:

迭代器模式主要用来处理数据集合,可以在不关注集合底层类型的情况下获取下一个元素或上一个元素(可以在上面的示例代码中追加规范方法进行扩展)。相对于java本身的Iterator接口来说,非常类似,使用场景目现也比较小,目前大部分的三方工具包都包含对集合的处理方法,可以了解一下。

学海无涯苦作舟!!!

相关推荐
佛祖让我来巡山1 天前
设计模式深度解析:策略模式、责任链模式与模板模式
设计模式·责任链模式·策略模式·模版模式
__万波__1 天前
二十三种设计模式(三)--抽象工厂模式
java·设计模式·抽象工厂模式
转转技术团队1 天前
VDOM 编年史
前端·设计模式·前端框架
明洞日记1 天前
【设计模式手册014】解释器模式 - 语言解释的优雅实现
java·设计模式·解释器模式
ZHE|张恒1 天前
设计模式(十六)迭代器模式 — 统一访问集合元素的方式,不暴露内部结构
设计模式·迭代器模式
未秃头的程序猿1 天前
🚀 设计模式在复杂支付系统中的应用:策略+工厂+模板方法模式实战
后端·设计模式
雨中飘荡的记忆1 天前
深入理解设计模式之单例模式
java·设计模式
8***29311 天前
能懂!基于Springboot的用户增删查改(三层设计模式)
spring boot·后端·设计模式
在未来等你2 天前
AI Agent设计模式 Day 19:Feedback-Loop模式:反馈循环与自我优化
设计模式·llm·react·ai agent·plan-and-execute
兵bing2 天前
设计模式-访问者模式
设计模式·访问者模式