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接口类似。

  • 相关阅读:
    一句SQL实现MYSQL的递归查询
    人生不过一个字【Life is but a word】
    VS2008 如何将Release版本设置可以调试的DEBUG版本
    微软 2018 年第一笔收购:文件存储公司 Avere Systems
    设置系统时间
    OpenVZ安装指南,一种操作系统级别的虚拟化技术
    云平台DevOps实践
    路由(Routing)
    Ubuntu命令
    net mvc中angular
  • 原文地址:https://www.cnblogs.com/yimengyizhen/p/11163892.html
Copyright © 2011-2022 走看看