zoukankan      html  css  js  c++  java
  • JAVA 设计模式 迭代器模式

    用途


    迭代器模式 (Iterator)
    提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示
    迭代器模式是一种行为型模式


    结构

    图-迭代器模式结构图

    Iterator : 定义访问元素的接口。
    interface Iterator {
        public Object first();
        public Object next();
        public boolean isDone();
        public Object currentItem();
    }

    ConcreteIterator : 实现 Iterator 接口。记录当前访问的元素在集合中的位置信息。

    class ConcreteIterator implements Iterator {
        private int current = 0;
        private ConcreteAggregate aggregate;
        
        public ConcreteIterator(ConcreteAggregate aggregate) {
            this.aggregate = aggregate;
        }

        @Override
        public Object first() {
            return aggregate.get(0);
        }

        @Override
        public Object next() {
            current++;
            if (current < aggregate.size()) {
                return aggregate.get(current);
            }
            return null;
        }

        @Override
        public boolean isDone() {
            return (current >= aggregate.size()) ? true : false;
        }

        @Override
        public Object currentItem() {
            return aggregate.get(current);
        }
    }

    Aggregate : 定义创建 Iterator 对象的接口。

    interface Aggregate {
        public Iterator CreateIterator();
    }

    ConcreteAggregate : 实现 Iterator 接口,返回一个合适的 ConcreteIterator 实例。

    class ConcreteAggregate implements Aggregate {
        private List<Object> items = new ArrayList<Object>();
        
        @Override
        public Iterator CreateIterator() {
            return new ConcreteIterator(this);
        }
        
        public int size() {
            return items.size();
        }
        
        public Object get(int index) {
            return items.get(index);
        }
        
        public void set(int index, Object element) {
            items.set(index, element);
        }
        
        public void add(Object element) {
            items.add(element);
        }
    }

    测试代码

    public class IteratorPattern {
        public static void main(String[] args) {
            ConcreteAggregate aggregate = new ConcreteAggregate();
            aggregate.add("张三");
            aggregate.add("李四");
            aggregate.add("王五");
            aggregate.add("赵六");
            
            Iterator iter = new ConcreteIterator(aggregate);
            Object item = iter.first();
            System.out.println("第一个人是:" + item);
            System.out.println("所有人的名单是:");
            while (!iter.isDone()) {
                System.out.println(iter.currentItem());
                iter.next();
            }
        }
    }

    运行结果

    第一个人是:张三
    所有人的名单是:
    张三
    李四
    王五
    赵六


    应用场景
    访问一个聚合对象的内容而无需暴露它的内部表示。
    支持对聚合对象的多种遍历。
    为遍历不同的聚合结构提供一个统一的接口。



    推荐

    本文属于 JAVA设计模式系列



    参考资料

    《大话设计模式》

    《HeadFirst设计模式》
  • 相关阅读:
    use paramiko to connect remote server and execute command
    protect golang source code
    adjust jedi vim to python2 and python3
    install vim plugin local file offline
    add swap file if you only have 1G RAM
    datatables hyperlink in td
    django rest framework custom json format
    【JAVA基础】网络编程
    【JAVA基础】多线程
    【JAVA基础】String类的概述和使用
  • 原文地址:https://www.cnblogs.com/jingmoxukong/p/4236056.html
Copyright © 2011-2022 走看看