美文网首页
迭代器模式

迭代器模式

作者: Davisxy | 来源:发表于2019-05-07 11:55 被阅读0次

场景:

  • 提供一种可以遍历聚合对象的方式。又称为:游标cursor模式
  • 聚合对象:存储对象
  • 迭代器:遍历数据

结构:

  • 聚合对象:存储数据
  • 迭代器:遍历数据

小栗子:

package com.principle.iterator;

public interface MyIterator {
    //将游标指向第一个元素
    void first();
    //将游标指向下一个元素
    void next();
    //判断是否存在下一个元素
    boolean hasNext();
    
    boolean isFirst();
    
    boolean isLast();
    
    //获取当前游标指向对象
    Object getCurrentObj();
}
package com.principle.iterator;

import java.util.ArrayList;
import java.util.List;

public class ConcreteMyAggregate {

    private List<Object> list = new ArrayList<Object>();

    public ConcreteMyAggregate() {
    }

    public void addObject(Object obj) {
        this.list.add(obj);
    }

    public void removeObject(Object obj) {
        this.list.remove(obj);
    }

    public List<Object> getList() {
        return list;
    }

    public void setList(List<Object> list) {
        this.list = list;
    }

    public MyIterator createIterator() {
        return new ConcreteIterator();
    }

    private class ConcreteIterator implements MyIterator {

        // 定义游标用于记录遍历时的位置
        private int cursor;

        @Override
        public void first() {
            cursor = 0;
        }

        @Override
        public void next() {
            if (cursor < list.size()) {
                cursor++;
            }
        }

        @Override
        public boolean hasNext() {
            if (cursor < list.size()) {
                return true;
            }
            return false;
        }

        @Override
        public boolean isFirst() {
            return cursor == 0;
        }

        @Override
        public boolean isLast() {
            return cursor == list.size() - 1;
        }

        @Override
        public Object getCurrentObj() {
            return list.get(cursor);
        }

    }

}
package com.principle.iterator;

public class Client {
    public static void main(String[] args) {
        ConcreteMyAggregate cma=new ConcreteMyAggregate();
        cma.addObject("aa");
        cma.addObject("bb");
        cma.addObject("cc");
        
        MyIterator iterator=cma.createIterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.getCurrentObj());
            iterator.next();
            
        }
    }
}
控制台打印:
aa
bb
cc

类图

迭代器模式.png

相关文章

网友评论

      本文标题:迭代器模式

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