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

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

一、介绍

迭代器模式(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();
        }
    }

相关文章
|
28天前
|
设计模式 Java Kotlin
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
42 2
|
1月前
|
设计模式 Java Kotlin
Kotlin - 改良设计模式 - 迭代器模式
Kotlin - 改良设计模式 - 迭代器模式
31 0
|
2月前
|
设计模式 Java 开发者
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。对于快速学习Kotlin的用户,推荐查看“简洁”系列教程。本文重点介绍迭代器模式,通过具体示例展示了如何在Kotlin中实现迭代器模式,包括使用Iterator、Iterable接口及重载iterator运算符的方法。
37 4
|
2月前
|
设计模式 Java Kotlin
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
33 2
|
2月前
|
设计模式 Java 开发者
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
本教程详细讲解了Kotlin中的迭代器模式,包括如何通过实现Iterator和Iterable接口以及重载iterator运算符来实现可遍历的自定义集合。示例展示了如何创建一个图书集类,并通过不同方式使其支持遍历操作,适合希望深入了解Kotlin迭代器模式的开发者。
34 3
|
2月前
|
设计模式 Java Kotlin
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
38 1
|
1月前
|
设计模式 Java Kotlin
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
35 0
|
2月前
|
设计模式 Java Kotlin
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
Kotlin教程笔记(54) - 改良设计模式 - 迭代器模式
29 1
|
3月前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
5月前
|
存储 NoSQL Go
iLogtail设计模式问题之迭代器模式是如何应用的
iLogtail设计模式问题之迭代器模式是如何应用的

热门文章

最新文章