• 8、迭代器模式


    一、迭代器模式概念:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

    二、迭代器的角色构成

      (1)、迭代器角色

      (2)、具体迭代器角色

      (3)、容器角色

      (4)、具体容器角色

    三、迭代器模式的优缺点

      优点:1、简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通过游标来取得,但是用户需要在对集合了解很清楚的前提下,自行遍历对象,但是对于hash表来说,用户遍历起来就比较麻烦了,而引入了迭代器就简单的多了

        2、封装性良好,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用关心。

        3、可以提供多种遍历方法,正序倒序都可以。

      缺点:1、对于简单的遍历,使用迭代器会繁琐,像ArrayList,我们宁可使用for循环和get方法来遍历集合

        

    四、实现

    package Iterator;
    
    /**
     * Created by Administrator on 2018/3/3 0003.
     */
    public interface MyList {
        public void add(Object object);
        public Object get(int index);
        public MyIterator iterator();
        public int getSize();
    }
    package Iterator;
    
    /**
     * Created by Administrator on 2018/3/3 0003.
     */
    public class ConList implements MyList{
        Object obj[];
        int size=0;
        int index=0;
        public ConList(){
            obj=new Object[100];
        }
        @Override
        public void add(Object object) {
            obj[index++]=object;
            this.size++;
        }
    
        @Override
        public Object get(int index) {
            if(obj[index]!=null){
                return obj[index];
            }
            return null;
        }
    
        @Override
        public ConIterator iterator() {
            return new ConIterator(this);
        }
    
        @Override
        public int getSize() {
            return this.size;
        }
    }
    package Iterator;
    
    /**
     * Created by Administrator on 2018/3/3 0003.
     */
    public interface MyIterator {
        public boolean hasNext();
        public Object Next();
    }
    package Iterator;
    
    /**
     * Created by Administrator on 2018/3/3 0003.
     */
    public class ConIterator implements MyIterator{
        private int index=0;
        private ConList list;
        public ConIterator(ConList list){
            this.list=list;
        }
        @Override
        public boolean hasNext() {
            if(index>=list.size){
               return false;
            }
            return true;
        }
    
        @Override
        public Object Next() {
            Object obj=list.get(index++);
            return obj;
        }
    }
    package Iterator;
    
    /**
     * Created by Administrator on 2018/3/3 0003.
     */
    public class Test {
        public static void main(String[] args) {
            ConList list=new ConList();
            MyIterator iterator=list.iterator();
            list.add("asd");
            list.add("asdd");
            while(iterator.hasNext()){
                System.out.println(iterator.Next());
            }
        }
    }
  • 相关阅读:
    物理数据库设计
    物理数据库设计
    NHibernate 帮助类(单例实际运用)
    HttpContext请求上下文对象
    SqlDataReader类
    在你不懂怎么做的时候
    System.Object 基类
    逻辑数据库设计
    逻辑数据库设计
    NHibernate使用MemCache二级缓存
  • 原文地址:https://www.cnblogs.com/television/p/8525150.html
Copyright © 2020-2023  润新知