小蔡学Java

Java之设计模式 (二十一)

2023-09-30 12:34 939 0 设计模式 设计模式迭代器模式

迭代器模式(Iterator Pattern)

  迭代器模式是一种行为设计模式,它提供一种统一的方法来遍历一个容器中的所有元素,而不用暴露容器的内部结构。   使用迭代器模式可以将遍历容器和容器本身的实现分离开来,从而可以在不影响容器的情况下更改遍历算法。此外,迭代器模式可以简化遍历代码,并提供更加通用的遍历方法。

使用场景

  • 需要遍历一个容器中的所有元素,但是不想暴露容器的内部结构。

  • 需要提供一个通用的遍历方法,而不需要知道容器的具体实现细节。

  • 需要支持多种不同的遍历方式,例如正序、倒序、随机等。

  • 需要对容器的遍历算法进行更改,但是不想影响容器本身的实现。

  • 需要在遍历过程中同时进行修改操作

代码实现

  下面是一个使用Java迭代器模式的简单例子,以遍历一个名字列表为例:   首先定义一个名字列表接口,包含两个方法:添加名字和获取迭代器。

public interface NameList {
    void addName(String name);
    Iterator<String> iterator();
}

  然后定义一个名字列表实现类,实现添加名字和获取迭代器的方法。   在这个实现类中,定义了一个内部类 NameIterator,实现了 Iterator 接口中的 hasNext、next 和 remove 方法。

public class NameListImpl implements NameList {
    private List<String> names = new ArrayList<>();

    public void addName(String name) {
        names.add(name);
    }

    public Iterator<String> iterator() {
        return new NameIterator();
    }

    private class NameIterator implements Iterator<String> {
        private int index = 0;

        public boolean hasNext() {
            return index < names.size();
        }

        public String next() {
            return names.get(index++);
        }

        public void remove() {
            names.remove(--index);
        }
    }
}

  下面是一个使用迭代器遍历名字列表的示例代码:

public class IteratorDemo {
    public static void main(String[] args) {
        NameList nameList = new NameListImpl();
        nameList.addName("Alice");
        nameList.addName("Bob");
        nameList.addName("Charlie");

        Iterator<String> iterator = nameList.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

  输出结果:

Alice
Bob
Charlie

使用小结

  在Java中,迭代器模式已经被广泛应用在集合类中。Java集合类中都实现了Iterator接口,提供了一种通用的迭代器实现方式,可以方便地遍历集合中的所有元素。

评论( 0 )

  • 博主 Mr Cai
  • 坐标 河南 信阳
  • 标签 Java、SpringBoot、消息中间件、Web、Code爱好者

文章目录