迭代器模式-大话设计模式

简介: 迭代器模式-大话设计模式

一、介绍

迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,你就应该考虑用迭代器模式。

你需要对聚集有多种方式遍历时,可以考虑用迭代器模式。

为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的接口。

二、代码实现

//迭代器抽象类
public abstract class Iterator {
    //第一个
    public abstract Object first();
 
    //下一个
    public abstract Object next();
 
    //是否到最后
    public abstract boolean isDone();
 
    //当前对象
    public abstract Object currentItem();
}
 
//聚集抽象类
public abstract class Aggregate {
    //创建迭代器
    public abstract Iterator createIterator();
}
 
 
//具体聚集类
public class ConcreteAggregate extends Aggregate {
    private ArrayList<Object> items = new ArrayList<>();
 
    @Override
    public Iterator createIterator() {
        return new ConcreteIterator(this);
    }
 
    //返回聚集总个数
    public int getCount() {
        return items.size();
    }
 
    //增加新对象
    public void add(Object object) {
        items.add(object);
    }
 
    //得到指定索引的对象
    public Object getCurrentItem(int index) {
        return items.get(index);
    }
}
 
 
//具体迭代器类
public class ConcreteIterator extends Iterator {
    private ConcreteAggregate aggregate;
 
    private int current = 0;
 
    public ConcreteIterator(ConcreteAggregate aggregate) {
        this.aggregate = aggregate;
    }
 
    @Override
    public Object first() {
        return aggregate.getCurrentItem(0);
    }
 
    @Override
    public Object next() {
        Object ret = null;
        current++;
        if (current < aggregate.getCount()) {
            ret = aggregate.getCurrentItem(current);
        }
        return null;
    }
 
    @Override
    public boolean isDone() {
        return current >= aggregate.getCount() ? true : false;
    }
 
    @Override
    public Object currentItem() {
        return aggregate.getCurrentItem(current);
    }
}

测试

  public static void main(String[] args) {
        ConcreteAggregate bus = new ConcreteAggregate();
        bus.add("A");
        bus.add("B");
        bus.add("C");
        bus.add("D");
        bus.add("E");
        bus.add("F");
        bus.add("G");
 
        Iterator c = new ConcreteIterator(bus);
        c.first();
        while (!c.isDone()) {
            System.out.println(c.currentItem());
            c.next();
        }
    }

目录
相关文章
|
2月前
|
设计模式 Java
Java设计模式【十七】:迭代器模式
Java设计模式【十七】:迭代器模式
40 0
|
2月前
|
设计模式
二十三种设计模式全面解析-组合模式与迭代器模式的结合应用:构建灵活可扩展的对象结构
二十三种设计模式全面解析-组合模式与迭代器模式的结合应用:构建灵活可扩展的对象结构
|
4天前
|
设计模式 Java
Java设计模式之迭代器模式详解
Java设计模式之迭代器模式详解
|
9月前
|
设计模式
设计模式14 - 迭代器模式【Iterator Pattern】
设计模式14 - 迭代器模式【Iterator Pattern】
19 0
|
23天前
|
设计模式 架构师 NoSQL
设计模式第六讲:责任链模式和迭代器模式详解
遍历任务交由迭代器完成,这简化了聚合类。  C. 它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。
143 0
|
2月前
|
设计模式 Go
[设计模式 Go实现] 行为型~迭代器模式
[设计模式 Go实现] 行为型~迭代器模式
|
2月前
|
设计模式 XML 数据格式
【设计模式】探秘迭代器模式:如何像数星星一样遍历你的数据集?
【设计模式】探秘迭代器模式:如何像数星星一样遍历你的数据集?
26 0
|
2月前
|
设计模式 Java
23种设计模式,迭代器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第8天】迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问一个聚合对象中的各个元素,而无需暴露该对象的内部表示。它主要用于遍历集合对象(如列表、树等)。
32 9
|
2月前
|
设计模式 算法 Java
【设计模式系列笔记】迭代器模式
迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。该模式通过定义一个迭代器接口,负责定义访问和遍历元素的方法,以及一个可迭代接口,负责返回迭代器的实例。
33 0
|
2月前
|
设计模式 Java
小谈设计模式(21)—迭代器模式
小谈设计模式(21)—迭代器模式