• 浅谈Java设计模式——迭代器模式(Iterator)


    一、概述

            给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

    二、使用场景

    1.访问一个聚合对象的内容而无需暴露它的内部表示。 

    2.支持对聚合对象的多种遍历。 

    3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代)。

    三、参与者

    1.Iterator 迭代器定义访问和遍历元素的接口。 

    2.ConcreteIterator 具体迭代器实现迭代器接口。 对该聚合遍历时跟踪当前位置。 

    3.Aggregate 聚合定义创建相应迭代器对象的接口。

    4.ConcreteAggregate 具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例.

    四、类图

    五、代码示例

    1.Iterator

    /**
     * Iterator
     * @author zhipeng_Tong
     */
    public interface Iterator {
        Object next();
        Object first();
        Object last();
        boolean hasNext();
    }

    2.ConcreteIterator

    /**
     * ConcreteIterator
     * @author zhipeng_Tong
     */
    public class IteratorImpl implements Iterator {
        private List list;
        private int index;
    
        public IteratorImpl(List list) {
            this.list = list;
        }
    
        @Override
        public Object next() {
            index++;
            return list.get(index - 1);
        }
    
        @Override
        public Object first() {
            return list.get(0);
        }
    
        @Override
        public Object last() {
            return list.get(list.size() - 1);
        }
    
        @Override
        public boolean hasNext() {
            return index < list.size();
        }
    }

    3.Aggregate

    /**
     * Aggregate
     * @author zhipeng_Tong
     */
    public interface List {
        Iterator iterator();
    
        Object get(int index);
    
        int size();
    
        void add(Object o);
    }

    4.ConcreteAggregate

    /**
     * ConcreteAggregate
     * @author zhipeng_Tong
     */
    public class ListImpl implements List {
        private Object[] list;
        private int index;
        private int size;
    
        public ListImpl() {
            this.list = new Object[100];
            this.index = 0;
            this.size = 0;
        }
    
        @Override
        public Iterator iterator() {
            return new IteratorImpl(this);
        }
    
        @Override
        public Object get(int index) {
            return list[index];
        }
    
        @Override
        public int size() {
            return this.size;
        }
    
        @Override
        public void add(Object o) {
            list[index++] = o;
            size++;
        }
    }

    5.测试代码

    public class Client {
        public static void main(String[] args) {
            List list = new ListImpl();
            list.add("hello");
            list.add("word");
            list.add("java");
    
            Iterator iterator = list.iterator();
            while (iterator.hasNext())
                System.out.println(iterator.next());
    
            System.out.println("first: " + iterator.first());
            System.out.println("last: " + iterator.last());
    
            System.out.println();
    
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i));
            }
        }
    }

    运行结果

    hello
    word
    java
    first: hello
    last: java
    
    hello
    word
    java
  • 相关阅读:
    idea快速生成javaBean快捷键
    2019.10.22 关于java对象的一些理解
    2019.10.21 解决win10电脑qq通话没有声音
    知乎上看到的好的文章
    2019.10.2怎么查看那些ip访问了你的网站
    2019.10.1怎么在服务器上建一个网站
    2019.9.30第一次把自己写的前端东西放在服务器上哈哈
    新手容易犯的错误
    Python3-列表推导式
    Python3-os模块
  • 原文地址:https://www.cnblogs.com/IdealSpring/p/11871164.html
Copyright © 2020-2023  润新知