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

学海无涯苦作舟!!!

相关推荐
hqxstudying3 小时前
Java创建型模式---原型模式
java·开发语言·设计模式·代码规范
WebInfra5 小时前
如何在程序中嵌入有大量字符串的 HashMap
算法·设计模式·架构
Gavynlee9 小时前
plantuml用法总结
设计模式
DKPT9 小时前
Java享元模式实现方式与应用场景分析
java·笔记·学习·设计模式·享元模式
缘来是庄9 小时前
设计模式之迭代器模式
java·设计模式·迭代器模式
摘星编程12 小时前
深入解析迭代器模式:优雅地遍历聚合对象元素
设计模式·迭代器模式·软件开发·编程技巧·面向对象设计
DKPT17 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
缘来是庄1 天前
设计模式之中介者模式
java·设计模式·中介者模式
GodKeyNet1 天前
设计模式-责任链模式
java·设计模式·责任链模式
摘星编程1 天前
深入理解责任链模式:从HTTP中间件到异常处理的实战应用
http·设计模式·中间件·责任链模式·实战应用