迭代器模式

来源:互联网 发布:ubuntu14.04安装php 编辑:程序博客网 时间:2024/05/18 13:25

1类图

这里写图片描述

2定义

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

3应用场景

遍历一个容器对象时

4迭代器接口

public interface Iterator<E> {    boolean hasNext();    E next();}

5具体迭代器类

public class ConcreteIterator<E> implements Iterator<E>{    List<E> list = new ArrayList<>();    private int cursor = 0;    public ConcreteIterator(List<E> list){        this.list = list;    }    @Override    public boolean hasNext() {        // TODO Auto-generated method stub        return cursor != list.size();    }    @Override    public E next() {        // TODO Auto-generated method stub        E obj = null;        if(this.hasNext()){            obj = this.list.get(cursor++);        }        return obj;    }}

6容器接口

public interface Aggregate<E> {    void add(E obj);    void remove(E obj);    Iterator<E> itrerator();}

7具体容器类

public class ConcreteAggregate<E> implements Aggregate<E> {    List<E> list = new ArrayList<>();    @Override    public void add(E obj) {        // TODO Auto-generated method stub        list.add(obj);    }    @Override    public void remove(E obj) {        // TODO Auto-generated method stub        list.remove(obj);    }    @Override    public Iterator<E> itrerator() {        // TODO Auto-generated method stub        return new ConcreteIterator<>(list);    }}

8客户类

public class Client {    public static void main(String[] args) {        Aggregate<String> a = new ConcreteAggregate<>();        a.add("a");        a.add("b");        a.add("c");        a.add("d");        a.add("e");        Iterator<String> iterator = a.itrerator();        while(iterator.hasNext()){            System.out.println(iterator.next());        }    }}
原创粉丝点击