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接口来说,非常类似,使用场景目现也比较小,目前大部分的三方工具包都包含对集合的处理方法,可以了解一下。

学海无涯苦作舟!!!

相关推荐
Zane19948 小时前
函数式编程里的函数,其实不是你天天写的那个函数——三大编程范式的边界在哪
设计模式
Zane19941 天前
策略模式现在该不该上?一次讲清楚过度设计和设计不足怎么找平衡
设计模式
她说..1 天前
常见设计模式-模板方法模式
java·spring·设计模式·springboot
xiaofeiyang1502 天前
第六章 · 桥接 — 三支毛笔,画出九种颜色
设计模式
Shadow(⊙o⊙)2 天前
OTOL设计模式 One Thread One Loop
服务器·网络·设计模式
sarasuki3 天前
如何让LLM 能在半夜偷偷打开网易云呢?
人工智能·设计模式·agent
小王师傅663 天前
【设计模式】装饰模式(四):框架源码实战——从 Java I/O 到 Spring 到 MyBatis
java·设计模式
执明wa3 天前
Android RecyclerView 多类型, 多种 Item
android·xml·开发语言·设计模式·android studio
sarasuki3 天前
如何让 Agent 获取更多的能力?插件 / 技能系统
人工智能·设计模式·agent
sarasuki3 天前
如何让 Agent 安全运行你的命令 :命令分级 + Hook + 读写锁
人工智能·设计模式·agent