java设计模式--迭代器模式

2019-08-09 00:00:00 java 模式 设计

迭代器模式:提供一种方法顺序来访问一个聚合对象中的元素,并且不暴露该对象的内部表示。当我们需要去遍历一个对象时就可以考虑使用迭代器模式。

聚集抽象类

public interface Collection {
    Iterator createIterator();
}

 

具体聚集类。

public class ConcreteCollection implements Collection {

    private List<Object> list = new ArrayList<>();
    @Override
    public Iterator createIterator() {
        return new ConcreteIterator(this);
    }
    //获取集合大小
    public int count(){
        return list.size();
    }
    //添加元素
    public void setList(Object object){
        list.add(object);
    }
    //获取元素
    public Object getList(int index){
       return list.get(index);
    }
}

 

迭代抽象类。

public interface Iterator {
    //第一个节点
    Object first();
    //下一个节点
    Object next();
    //是否遍历完成
    Boolean isDone();
    //当前节点
    Object currentItem();

}

 

具体迭代类。

public class ConcreteIterator implements Iterator {

    private ConcreteCollection concreteCollection;
    private int current = 0;

    public ConcreteIterator(ConcreteCollection concreteCollection){
        this.concreteCollection = concreteCollection;
    }
    @Override
    public Object first() {
        return concreteCollection.getList(0);
    }

    @Override
    public Object next() {
        current++;
        if(current<concreteCollection.count()){
            return concreteCollection.getList(current);
        }else {
            return null;
        }
    }

    @Override
    public Boolean isDone() {
        return current >=concreteCollection.count()? true:false;
    }

    @Override
    public Object currentItem() {
        return concreteCollection.getList(current);
    }
}

 

测试类。

public class Test {
    public static void main(String[] args) {
        ConcreteCollection concreteCollection = new ConcreteCollection();
        concreteCollection.setList("a");
        concreteCollection.setList("b");
        concreteCollection.setList("c");
        concreteCollection.setList("d");
        ConcreteIterator concreteIterator = new ConcreteIterator(concreteCollection);
        Object first = concreteIterator.first();
        while (!concreteIterator.isDone()){
            System.out.println(concreteIterator.currentItem());
            concreteIterator.next();
        }
    }
}

测试结果:

a
b
c
d

  其实迭代器模式在java中早有实现,java中的集合类实现了Iterable接口,而Iterable接口中声明了一个Iterator方法,返回一个Iterator,这个Iterator接口中定义了遍历的相关方法,和上面的例子中的Iterator接口类似。

 

相关文章