美文网首页
2、迭代器模式(Iterator)

2、迭代器模式(Iterator)

作者: 火山_6c7b | 来源:发表于2020-07-17 00:05 被阅读0次

1. 迭代器模式

1.1 迭代器模式简介

  遍历一个聚合对象,又不需要了解聚合对象的内部结构,可以使用迭代器模式。

特点:

  • 主要用于描述对类或对象怎样交互和怎样分配职责;
  • 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
  • 访问一个聚合对象的内容而无需暴露它的内部表示。
  • 支持对聚合对象的多个和多种遍历。
  • 为遍历不同的聚合结构提供一个统一的接口

1.2 迭代器模式组成

UML图:

迭代器模式uml.png

主要角色:

  • Iterator: 抽象迭代器
  • ConcreteIterator: 具体迭代器
  • Aggregate: 抽象聚合类
  • ConcreteAggregate: 具体聚合类

2. 迭代器实现示例

Iterator:

public interface Iterator {
    public abstract boolean hasNext();
    public abstract Object next();
}

Aggregate:

public interface Aggregate {
    public abstract Iterator iterator();
}

Television:

public class Television implements Aggregate {

    private Channel[] channels;
    private int last = 0;

    public Television(int maxsize) {
        this.channels = new Channel[maxsize];
    }

    public Channel getChannelAt(int index) {
        return Channels[index];
    }

    public void appendChannel(Channel Channel) {
        this.Channels[last] = Channel;
        last++;
    }

    public int getLength(){
        return last;
    }

    @Override
    public Iterator iterator() {
        return new ChannelIterator(this);
    }
}

ChannelIterator:

public class TelevisionIterator implements Iterator {

    private Television television;
    private int index;

    public TelevisionIterator(Television television) {
        this.Television = television;
        this.index = 0;
    }

    @Override
    public boolean hasNext() {
        if (index < television.getLength()) {
            return true;
        }
        return false;
    }

    @Override
    public Object next() {
        Channel channel = television.getChannelAt(index);
        index ++;
        return channel;
    }
}

使用示例:

Television television = new Television(4);
television.appendChannel(new Channel("cctv-1"));
television.appendChannel(new Channel("cctv-4"));
television.appendChannel(new Channel("cctv-6"));
television.appendChannel(new Channel("cctv-8"));
Iterator it = television.iterator();
while (it.hasNext()) {
    Channel channel = (Channel) it.next();
    System.out.println(channel.getName());
}

相关文章

网友评论

      本文标题:2、迭代器模式(Iterator)

      本文链接:https://www.haomeiwen.com/subject/fefohktx.html