张裕 发表于 2025-1-5 09:41:40

行为模式3.迭代器模式

 行为型模式


[*]模板方法模式(Template Method Pattern)
[*]下令模式(Command Pattern)
[*]迭代器模式(Iterator Pattern)
[*]观察者模式(Observer Pattern)
[*]中介者模式(Mediator Pattern)
[*]备忘录模式(Memento Pattern)
[*]表明器模式(Interpreter Pattern)
[*]状态模式(State Pattern)
[*]战略模式(Strategy Pattern)
[*]职责链模式(Chain of Responsibility Pattern)
[*]访问者模式(Visitor Pattern)
迭代器模式(Iterator Pattern) 是一种行为型设计模式,它提供一种次序访问聚集对象元素的方式,而不暴露聚集的内部结构。迭代器模式允许客户端按次序访问聚集中的元素,而无需直接访问聚集本身。通常,当你有一个聚集(如列表、队列、栈等),你盼望对聚集中的元素进行迭代,但又不想暴露其内部结构时,可以使用迭代器模式。
迭代器模式的主要组成部分


[*]Iterator(迭代器):迭代器接口,界说了遍历聚集元素的方法,如 hasNext() 和 next()。
[*]ConcreteIterator(具体迭代器):实现了Iterator接口,并界说了怎样遍历具体聚集中的元素。
[*]Aggregate(聚合类,也叫聚集类):聚集接口,提供创建迭代器对象的方法。
[*]ConcreteAggregate(具体聚合类):实现了Aggregate接口,界说了怎样存储和获取聚集元素。
迭代器模式的工作流程


[*]创建迭代器:客户端通过聚合类获取迭代器实例。
[*]遍历聚集:客户端通过迭代器的方法遍历聚集中的元素,使用 hasNext() 判定是否有下一个元素,使用 next() 获取当前元素。
[*]不暴露聚集的内部实现:迭代器模式让客户端可以或许通过标准的接口访问聚集元素,而不需要知道聚集的内部结构。
迭代器模式的长处



[*]封装性:聚集的实现细节对客户端是隐蔽的,客户端不需要关心聚集怎样存储数据。
[*]灵活性:可以对不同的聚集范例使用雷同的迭代方式。
[*]单一职责:聚合类负责存储数据,迭代器类负责遍历数据,这样做可以避免聚集类本身过于复杂。
Java 示例代码

import java.util.ArrayList;
import java.util.List;

// 1. 定义Iterator接口
interface Iterator {
    boolean hasNext();// 判断是否有下一个元素
    Object next();      // 获取下一个元素
}

// 2. 定义Aggregate接口(集合接口)
interface Aggregate {
    Iterator createIterator();// 创建一个迭代器
}

// 3. ConcreteIterator(具体迭代器)实现Iterator接口
class ConcreteIterator implements Iterator {
    private List<Object> items;
    private int position = 0;

    public ConcreteIterator(List<Object> items) {
      this.items = items;
    }

    @Override
    public boolean hasNext() {
      return position < items.size();
    }

    @Override
    public Object next() {
      if (this.hasNext()) {
            return items.get(position++);
      }
      return null;
    }
}

// 4. ConcreteAggregate(具体集合类)实现Aggregate接口
class ConcreteAggregate implements Aggregate {
    private List<Object> items = new ArrayList<>();

    public void addItem(Object item) {
      items.add(item);
    }

    @Override
    public Iterator createIterator() {
      return new ConcreteIterator(items);
    }
}

// 5. 客户端使用迭代器遍历集合
public class IteratorPatternDemo {
    public static void main(String[] args) {
      // 创建一个具体的集合
      ConcreteAggregate aggregate = new ConcreteAggregate();
      aggregate.addItem("Item 1");
      aggregate.addItem("Item 2");
      aggregate.addItem("Item 3");
      aggregate.addItem("Item 4");

      // 创建迭代器
      Iterator iterator = aggregate.createIterator();

      // 使用迭代器遍历集合
      while (iterator.hasNext()) {
            System.out.println(iterator.next());
      }
    }
}


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 行为模式3.迭代器模式