zoukankan      html  css  js  c++  java
  • 设计模式:迭代器模式

      迭代器模式又称游标模式,该模式可以顺序访问一个集合中元素而不必暴露集合内部对象。

    在Java集合框架Collection中广泛使用该模式来遍历内部元素。所有熟悉java语言的应该都了解并应用过。

    采用迭代器遍历对象。

      迭代器结构:

       聚合对象(collection):存储数据

       迭代器:遍历数据

      

    例子:

      简单自己实现一个列表元素的迭代器。

      

    public interface MyIterator {
        //指向第一个元素
        void first();
        //指向下一个元素
        Object next();
        //是否存在下一个元素
        boolean hasNext();
        boolean isFirst();
        boolean isLast();
    }
    

      

    /**
     * 自定义集合对象
     */
    public class MyCollection {
    
        private List<Object> list = new ArrayList<>();
    
        public void add(Object obj) {
            list.add(obj);
        }
    
        public void remove(Object obj) {
            list.remove(obj);
        }
    
        public List<Object> getList() {
            return list;
        }
    
        public void setList(List<Object> list) {
            this.list = list;
        }
    
        public MyIterator iterator() {
            return new SelfIterator();
        }
        
        class SelfIterator implements MyIterator {
            //定义一个索引位置表示游标
            private int index;
    
            //指向第一个元素即索引为0
            @Override
            public void first() {
                index = 0;
            }
    
            @Override
            public Object next() {
                if (index < list.size()) {
                    Object obj = list.get(index);
                    index++;
                    return obj;
                }
                return null;
            }
    
            @Override
            public boolean hasNext() {
                return index < list.size();
            }
    
            @Override
            public boolean isFirst() {
                return index == 0;
            }
    
            @Override
            public boolean isLast() {
                return index == (list.size() - 1);
            }
        }
    }
    

      简化起见,在这个集合对象封装一个数组,初始化时就创建好该数组

    public class Client {
    
        public static void main(String[] args) {
            MyCollection collection = new MyCollection();
            collection.add("1");
            collection.add("2");
            collection.add("3");
    
            MyIterator iterator = collection.iterator();
            while (iterator.hasNext()){
                System.out.println(iterator.next());
            }
        }
    }
    

      迭代器模式使遍历算法和集合对象分开,单独被封装在迭代子对象中,外部只需要调用迭代子对象的方法。

    迭代和集合对象解耦。新增迭代方式的时候可以不用修改集合对象,只需新增迭代器对象即可,符合开闭原则。

  • 相关阅读:
    《基于B_S模式的教务管理系统设计与实现》论文笔记(三)
    《重修补考报名考务管理信息系统中的网络技术》论文笔记(二)
    《基于WEB的独立学院补考重修管理系统研究》论文笔记(一)
    重修安排管理系统的设计与实现 文献收集
    重修安排管理系统的设计与实现 文献收集
    《暗时间》读书笔记
    R、Python、Scala 和 Java,到底该使用哪一种大数据编程语言?
    编程和音乐真的很像吗?
    关于虚拟现实叙事方式的终极入门指南
    如何避免脆弱的代码
  • 原文地址:https://www.cnblogs.com/gcm688/p/10274249.html
Copyright © 2011-2022 走看看