zoukankan      html  css  js  c++  java
  • 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());
            }
        }
    }
  • 相关阅读:
    ListView -————不能不说的秘密
    良好的开端是成功的第一步———构建程序
    你所不知道的windows窗体
    数据库查询终结版2———分组——连接
    数据库的终结版查询————你想知道吗?
    《官神》浏览闲看笔记
    坚信梦想,奋勇前进!____OS小题狂刷2333
    众里寻他千百度,蓦然回首,却见写者优先算法,她在书本寂静处!
    生产消费问题扩展——三个并发进程R,M,P和一个共享的循环缓冲区B的并发控制
    多生产者-多消费者-环形缓冲区问题
  • 原文地址:https://www.cnblogs.com/television/p/8525150.html
Copyright © 2011-2022 走看看