zoukankan      html  css  js  c++  java
  • 浅谈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
  • 相关阅读:
    Maven下载Jar包(bat脚本)
    在CentOS7环境下安装Mysql
    在CentOS7下安装JDK1.8
    教你如何进行暗网之旅
    在CentOS7下搭建Hadoop2.9.0集群
    查询IP地址的免费API
    HTTP请求代理类(GET 、 POST 、PUT 、DELETE)
    JAVA 实现 GET、POST、PUT、DELETE HTTP请求
    002---rest_framework认证组件
    001---CBV和restful规范
  • 原文地址:https://www.cnblogs.com/IdealSpring/p/11871164.html
Copyright © 2011-2022 走看看