迭代器模式

2021-05-24  本文已影响0人  金煜博

什么是迭代器模式

迭代器可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(聚集对象是能够包容一组对象的容器对象)
通过创建聚集容器存储对象,在使用迭代器循环调用容器中的聚集对象,调用时隐藏了内部实现过程

示例图

图片.png

示例代码

1.创建Iterator迭代器类

public interface Iterator {
    //获取下一个元素
    Object next();
    //判断容器中是否还有下一个元素
    boolean hasNext();
}

2.创建ConcreteIterator迭代器实现类

public class ConcreteIterator implements  Iterator {
     List list =  new ArrayList<>();
     private int index = 0 ;

    public ConcreteIterator(List list) {
        this.list = list;
    }

    @Override
    public Object next() {
        Object object = null;
        if(this.hasNext()){
            object =  list.get(index++);
        }
        return  object;
    }

    @Override
    public boolean hasNext() {
        if(index==list.size()){
            return false;
        }
            return  true;
    }
}

3.创建Aggregate聚集容器

public interface Aggregate {
    //添加对象
    public void add(Object obj);
    //移除对象
    public void remove(Object obj);
    //获取对象
    public Iterator getIterator();
}

4.创建ConcreteAggreate聚集容器实现类

public class ConcreteAggreate implements  Aggregate {
    private List list = new ArrayList();
    @Override
    public void add(Object obj) {
        list.add(obj);
    }

    @Override
    public void remove(Object obj) {
        list.remove(obj);
    }

    @Override
    public Iterator getIterator() {
        return new ConcreteIterator(list);
    }
}

5.创建启动类

public class Test {
    public static void main(String[] args) {
        //创建聚集对象ConcreteAggreate
        ConcreteAggreate concreteAggreate = new ConcreteAggreate();
        //将不同类型的数据添加到聚集对象
        concreteAggreate.add(new Number[1]);
        concreteAggreate.add(new Date());
        concreteAggreate.add("字符串元素");
        concreteAggreate.add(123456);
        //获取迭代器对象
        Iterator iterator = concreteAggreate.getIterator();
        //按照顺序遍历数据
         while (iterator.hasNext()){
            Object obj =   iterator.next();
             System.out.println(obj);
         }

    }
}

6.运行结果


图片.png
上一篇下一篇

猜你喜欢

热点阅读