• Java源代码-迭代器模式


      Java无疑是最成功的项目之一了,而在其中学习设计模式和架构设计,无疑是最好不过了。

      概念:

      提供一种方法访问容器中的各个元素,而又不暴露该对象的内部细节。

      使用场景:

      和容器经常在一起,我们定义了一个容器,还要提供外部访问的方法,迭代器模式无疑是最好不过了。

      迭代器模式的UML类图:

      

      下面的代码是Java集合框架内部实现迭代器模式的精简版:

    public interface Iterator<E> {//迭代器接口精简版
        boolean hasNext();
        E next();
    }
    public interface List<E> {//容器接口精简版
        Iterator<E> iterator();
    }
    public class ArrayList<E> implements List<E> {
        private Object[] array;
        
        public ArrayList(){
            this.array=new Object[5];
            this.array[0]="a";
            this.array[1]="b";
            this.array[2]="c";
            this.array[3]="d";
            this.array[4]="e";
        }
        public Iterator<E> iterator() {
            return new ArrayIterator();
        }
        public class ArrayIterator implements Iterator<E>{
            private int cursor=0;
            public boolean hasNext() {
                if(cursor<array.length){
                    return true;
                }
                return false;
            }
            @SuppressWarnings("unchecked")
            public E next() {
                E e=(E) array[cursor++];            
                return e;
            }
        }
    }

      内部类的好处:

      如果没有内部类,要实现迭代器模式,有2种方式,第一,在容器类中定义一些方法,那就需要定义一些全局成员变量来记录光标等等一些数据,导致容器类繁杂,不易扩展。第二,与容器类平级建立一个迭代器类,这就需要类与类之间的通信,提升了容器类与迭代器类之间的耦合度。

      而,内部类,可以直接访问到容器类的成员变量与成员函数,内部类只需实现自己的方法即可。

      我认为,在一个类中,单纯的成员变量与成员函数满足不了日益复杂的需求,有时候,类内部中的概念也需要变量与函数,相信这就是内部类的意义所在。

                                                               

                                                                                                       

                                                                  

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    hdu3486 Interviewe (二分+线段树求区间最值)
    hdu2473 JunkMail Filter(并查集)
    hdu3290 The magic apple tree (dfs)
    hdu2610 Sequence one (dfs) &&hdu2611 Sequence two
    hdu1598 find the most comfortable road (枚举+并查集)
    hdu3635 Dragon Balls
    hdu2821 Pusher
    hdu1558 Segment set
    hdu 2514 Another Eight Puzzle
    url传递中文的解决方案
  • 原文地址:https://www.cnblogs.com/kingofkai/p/5836562.html
Copyright © 2020-2023  润新知