JAVA设计模式之迭代器模式

134 阅读1分钟

本文介绍23种设计模式之迭代器模式。

定义

提供一个方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示。

描述

  • 模式名称:ITERATOR(迭代器)
  • 类型:对象行为型模式
  • 意图:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
  • 适用性:
    • 访问一个聚合对象的内容而无需暴露它的内部表示。
    • 支持对聚合对象的多种遍历。
    • 为遍历不同的聚合结构提供一个统一的接口。
  • 效果:
  • 优点:
    • 它支持以不同的方式遍历一个聚合,复杂的聚合可用多种方式进行遍历。
    • 迭代器简化了聚合的接口。
  • 缺点:
    • 类的个数容易过多,增加复杂度。

类图

image.png

  1. 抽象聚合(Aggregate)角色:提供一个共同的接口供所有聚合使用。
  2. 具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。
  3. 抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、remove()、next() 等方法。
  4. 具体迭代器(Concretelterator)角色:实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。

实现代码

Aggregate

public interface Aggregate {
    
    Iterator createIterator();
}

ConcreteAggregate

public class ConcreteAggregate implements Aggregate {

    private ArrayList<String> list;
    public ConcreteAggregate(ArrayList<String> list){
        this.list = list;
    }

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

Concretelterator

public class ConcreteIterator implements Iterator {
    ArrayList<String> list;
    private int index = 0;
    public ConcreteIterator(ArrayList<String> list) {
        this.list = list;
    }


    @Override
    public boolean hasNext() {
        return index<list.size();
    }

    @Override
    public Object next() {
        return list.get(++index);
    }

    @Override
    public void remove() {
        if(index<=0){
            throw new IllegalStateException("当前没有数据,无法删除");
        }else {
            list.remove(--index);
        }
    }
}