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());
            }
        }
    }
    

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

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

  • 相关阅读:
    Ubuntu配置sublime text 3的c编译环境
    ORA-01078错误举例:SID的大写和小写错误
    linux下多进程的文件拷贝与进程相关的一些基础知识
    ASM(四) 利用Method 组件动态注入方法逻辑
    基于Redis的三种分布式爬虫策略
    Go语言并发编程总结
    POJ2406 Power Strings 【KMP】
    nyoj 会场安排问题
    Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
    Java的String、StringBuffer和StringBuilder的区别
  • 原文地址:https://www.cnblogs.com/gcm688/p/10274249.html
Copyright © 2011-2022 走看看