美文网首页
迭代模式

迭代模式

作者: 要学的东西太多了 | 来源:发表于2018-11-02 17:38 被阅读0次

    迭代模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象。我们常用的java迭代器就是这个模式。其优点是:(1)迭代子模式简化了聚集的接口。迭代子具备了一个遍历接口,这样聚集的接口就不必具备遍历接口。(2)每一个聚集对象都可以有一个或多个迭代子对象,每一个迭代子的迭代状态可以是彼此独立的。因此,一个聚集对象可以同时有几个迭代在进行之中。(3)由于遍历算法被封装在迭代子角色里面,因此迭代的算法可以独立于聚集角色变化。

    示例如下:

    public class Iteration {
        public static void main(String[] a){
            Iteration iteration=new Iteration();
            String[] strings={"假假按揭","22","进度框为空","kkk"};
            Aterator aterator=iteration.new MySet(strings).createIterator();
            while (!aterator.isOver()){
                System.out.println(aterator.currentItem());
                aterator.next();
            }
        }
    
        abstract class Aterator{
            protected ISet iSet;
            protected int index=0;
            public Aterator(ISet iSet) {
                this.iSet = iSet;
                index=0;
            }
            abstract void first();
            abstract void next();
            abstract Object currentItem();
            abstract boolean isOver();
        }
    
        interface ISet{
            int getSize();
            Object getObject(int index);
            Aterator createIterator();
        }
    
        class MySet implements ISet{
            private Object[] objects;
    
            public MySet(Object[] objects) {
                this.objects = objects;
            }
    
            @Override
            public int getSize() {
                return objects.length;
            }
    
            @Override
            public Object getObject(int index) {
                if(index>=objects.length)
                    return null;
                else
                    return objects[index];
            }
    
            @Override
            public Aterator createIterator() {
                return new MyIterator(this);
            }
    
            class MyIterator extends Aterator{
                private MyIterator(ISet iSet) {
                    super(iSet);
                }
    
                @Override
                public void first() {
                    index=0;
                }
    
                @Override
                public void next() {
                    if(index<iSet.getSize()){
                        index++;
                    }
                }
    
                @Override
                public Object currentItem() {
                    return iSet.getObject(index);
                }
    
                @Override
                public boolean isOver() {
                    return index==iSet.getSize();
                }
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:迭代模式

          本文链接:https://www.haomeiwen.com/subject/hkbcxqtx.html