zoukankan      html  css  js  c++  java
  • 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接口类似。

  • 相关阅读:
    hdu5628 Clarke and math
    LOJ#2452. 「POI2010」反对称 Antisymmetry
    LOJ#2444. 「NOI2011」阿狸的打字机
    BZOJ2795: [Poi2012]A Horrible Poem
    LOJ#2427. 「POI2010」珍珠项链 Beads
    云主机文件系统readonly处理案例
    兼容性测试中如何切换和管理多个JDK版本
    Promise之你看得懂的Promise
    一次MySQL线上慢查询分析及索引使用
    考拉消息中心消息盒子处理重构(策略模式)
  • 原文地址:https://www.cnblogs.com/yimengyizhen/p/11163892.html
Copyright © 2011-2022 走看看