美文网首页
迭代器模式(Iterator)

迭代器模式(Iterator)

作者: Febare | 来源:发表于2021-08-23 23:28 被阅读0次

    定义

    迭代器模式,提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部实现。

    Java 中的 Collection、List、Set、Map 等都包含了迭代器,是迭代器模式最典型示例。


    模式结构与实现

    UML图
    Code
    public  abstract class Aggregate {
        public abstract Iterator getIterator();
        public abstract void add(Object obj);
        public abstract void remove(Object obj);
    }
    
    public abstract class Iterator {
        public abstract Object first();
        public abstract Object next();
        public abstract boolean hasNext();
    }
     
    public class ConcreteAggregate extends Aggregate {
        private List<Object> items = new ArrayList<Object>();
     
        @Override
        public Iterator getIterator() {
            return new ConcreteIterator(items);
        }
    
        @Override
        public void add(Object obj) {
            items.add(obj);
        }
    
        @Override
        public void remove(Object obj) {
            items.remove(obj);
        }
    }
     
    public class ConcreteIterator extends Iterator {
        private List<Object> items = new ArrayList<Object>();
        private int count = 0;
    
        public ConcreteIterator(List<Object> items) {
            this.items = items;
        }
     
        @Override
        public Object first() {
            return items.get(0);
        }
     
        @Override
        public Object next() {
            return items.get(count++);
        }
     
        @Override
        public boolean hasNext() {
            return count >= items.size();
        }
    }
    
    public class Client {
        public static void main(String[] args) {
            ConcreteAggregate aggregate = new ConcreteAggregate();
            aggregate.add("江湾");
            aggregate.add("李坑");
            aggregate.add("思溪延村");
            aggregate.add("晓起村");
            aggregate.add("菊径村");
    
            Iterator iterator = aggregate.getIterator();
    
            System.out.println("首个景点:" + iterator.first());
    
            while (!iterator.hasNext()) {
                System.out.println(iterator.next());
            }
        }
    }
    

    总结

    优点
    • 访问一个聚合对象的内容而无须暴露它的内部实现,满足“开闭原则”。
    • 遍历任务交由迭代器完成,这简化了聚合类,满足“单一职责原则。
    • 支持以不同方式遍历一个聚合。
    • 增加新的聚合类和迭代器类都很方便,无须修改原有代码。
    • 封装性良好,为遍历不同的聚合结构提供一个统一的接口。
    缺点
    • 对于比较简单的遍历(像数组或者有序列表),使用迭代器方式遍历较为繁琐。

    相关文章

      网友评论

          本文标题:迭代器模式(Iterator)

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