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

学海无涯苦作舟!!!

相关推荐
黑不溜秋的3 分钟前
C++ 设计模式 - 策略模式
c++·设计模式·策略模式
付聪12102 小时前
策略模式介绍和代码示例
设计模式
ThereIsNoCode3 小时前
「软件设计模式」状态模式(State)
设计模式·状态模式
菜鸟一枚在这10 小时前
深入理解设计模式之代理模式
java·设计模式·代理模式
mjr11 小时前
设计模式-Java
java·设计模式
yuanpan12 小时前
23种设计模式之《组合模式(Composite)》在c#中的应用及理解
开发语言·设计模式·c#·组合模式
FLZJ_KL13 小时前
【设计模式】【创建型模式】单例模式(Singleton)
java·单例模式·设计模式
万兴丶16 小时前
Unity 适用于单机游戏的红点系统(前缀树 | 数据结构 | 设计模式 | 算法 | 含源码)
数据结构·unity·设计模式·c#
菜鸟一枚在这16 小时前
深入剖析抽象工厂模式:设计模式中的架构利器
设计模式·架构·抽象工厂模式
码熔burning16 小时前
(三)趣学设计模式 之 抽象工厂模式!
设计模式·抽象工厂模式