zoukankan      html  css  js  c++  java
  • 设计模式行为型迭代器模式(Iterator)

        概述

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

        适用性

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

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

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

        参与者

        1.Iterator

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

        2.ConcreteIterator

        具体迭代器实现迭代器接口.

        对该聚合遍历时跟踪当前位置.

        3.Aggregate

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

        4.ConcreteAggregate

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

        类图

     

        示例代码:

        package com.sql9.actioned;

        import java.util.ArrayList;

        import java.util.List;

        /**

        * 迭代器模式 实现示例

        * @author sean

        */

        interface IIterator<T> {

        T next();

        void first();

        void last();

        boolean hasNext();

        }

    class IIteratorImpl<T> implements IIterator<T> {

        private IList<T> list;

        private int index;

        public IIteratorImpl (IList<T> list) {

        index = 0;

        this.list = list;

        }

        @Override

        public T next() {

        T t = list.get(index);

        index++;

        return t;

        }

        @Override

        public void first() {

        index = 0;

        }

        @Override

        public void last() {

        index = list.size();

        }

        @Override

        public boolean hasNext() {

        return index < list.size();

        }

        }

        interface IList<T> {

        IIterator<T> iterator();

        T get(int index);

        int size();

        void add(T obj);

        }

        class IListImpl<T> implements IList<T> {

        private List<T> list;

        private int index;

        public IListImpl() {

        list = new ArrayList<T>();

        index = 0;

        }

        @Override

        public IIterator<T> iterator() {

        return new IIteratorImpl<T> (this);

        }

        @Override

        public T get(int index) {

        return list.get(index);

        }

        @Override

        public int size() {

        return list.size();

        }

        @Override

        public void add(T obj) {

        list.add(obj);

        }

        }

        public class IteratorTest {

        public static void main(String[] args) {

        // 2 ways of iteration

        IList<String> list = new IListImpl<String>();

        list.add(“a”);

        list.add(“b”);

        list.add(“c”);

        // 1st way

        System.out.println(“1. using iterator to traverse:”);

        IIterator<String> iter = list.iterator();

        while (iter.hasNext()) {

        System.out.println(iter.next());

        }

        // 2nd way

        System.out.println(“2. using list to traverse: ”);

        for (int i=0; i<list.size(); i++) {

        System.out.println(list.get(i));

        }

        }

        }

        结果:

        1. using iterator to traverse:

        a

        b

        c

        2. using list to traverse:

        a

        b

        c

    广州达内,www.gztarena.com www.gdtarena.com www.s-tarena.com
  • 相关阅读:
    UE4 ios环境搭建备忘
    我所理解的打击感 逐帧分析过几十款游戏的开发者经验分享
    可重入锁和不可重入锁
    Java中JDK和JRE的区别是什么?它们的作用分别是什么?
    Java开发岗位面试题
    详解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
    docker:轻量级图形页面管理工具Portainer
    Docker整合dockerfly实现UI界面管理(单机版)
    docker for mac的JSON配置文件中的hosts项修改后无法生效
    Maven [ERROR] 不再支持源选项 5。请使用 6 或更高版本
  • 原文地址:https://www.cnblogs.com/javaitpx/p/2830684.html
Copyright © 2011-2022 走看看