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

学海无涯苦作舟!!!

相关推荐
workflower10 小时前
情境感知系统
人工智能·机器学习·设计模式·自然语言处理·机器人
咖啡八杯12 小时前
设计模式中的原则
设计模式·接口隔离原则·里氏替换原则·开闭原则·合成复用原则·单一职责原则
安冬的码畜日常14 小时前
【工欲善其事】深入理解 Node.js 带并发上限的异步任务批量执行逻辑
javascript·设计模式·node.js·ai编程·异步编程·并发执行
AI大法师1 天前
一个机场如何被做成 IP 场景:宝可梦机场的设计方法总结
大数据·人工智能·设计模式·新媒体运营
晚安code1 天前
干掉成山的 if-else:工厂造、策略选,一文讲透两个模式的配合
后端·设计模式
workflower2 天前
从幻觉,到现实
人工智能·深度学习·机器学习·设计模式·机器人
电子科技圈2 天前
第二代无线平台历久弥新,赋能物联网创新迭代
人工智能·嵌入式硬件·mcu·物联网·设计模式·硬件架构·iot
choumin2 天前
创建型模式——工厂方法模式
c++·设计模式·工厂方法模式·创建型模式
choumin2 天前
创建型模式——原型模式
c++·设计模式·原型模式·创建型模式
37.2℃9952 天前
Claude Design哪个公司技术好
python·设计模式