Iterator Pattern--迭代器设计模式

1. What is? 关于迭代器设计模式

下面的解释如果看不下去可以看这个链接,以及这个。
设计意图:
1). 提供一种顺序访问一组对象而不用暴露其潜在实现的机制。
2). C++和java标准库抽象使得把关于集合的类和算法解耦合成为可能。
3). 有利于推广到‘全object状态’的集合访问机制。
4). 提供多态方式的便利机制。

存在问题:
我们需要抽象出不同数据结构的访问方式来定义算法,以至于这些数据结构能够更加透明的方式进行交互。
解决方案:
通常的容器类,比如说List已经给了我们访问其容器中元素的方式,同时隐藏了其内部实现。但,当我们想要以一种新的自定义方式遍历的时候,同时我们不想增加太多内容这样会使得List接口变得很臃肿,我们怎么做呢?
提供一种通用的能够遍历很多种集合对象(i.e. 多态迭代)将很有意义。
迭代器模式做的是这样一类工作:主要思想是负责访问和遍历整个集合元素,通过把它放入已经定义好了标准便利协议的迭代器对象中。

2. Iterator Design pattern 图示

这里定义了2个接口:
interface Container & Iterator.
一个实际类类型:
NameRepository: 外部直接实现了Container 接口,内部类中实现了Iterator接口。
Iterator Pattern--迭代器设计模式_第1张图片

3. 迭代器设计模式Demo

package com.fqy.blog;

/*
 * @fqyuan 2017/06/26
 * Interface: Iterator
 * Interface: Container
 * NameRepository: Concrete class that implements Container with an inner class which implements Iterator.
 */
interface Iterator {
    public boolean hasNext();

    public Object next();
}

interface Container {
    public Iterator getIterator();
}

class NameRepository implements Container {
    public String names[] = { "Robert", "John", "Julie", "Lora" };

    @Override
    public Iterator getIterator() {
        // TODO Auto-generated method stub
        return new NameIterator();
    }

    private class NameIterator implements Iterator {
        int index;

        @Override
        public boolean hasNext() {
            if (index < names.length)
                return true;
            return false;
        }

        @Override
        public Object next() {
            if (this.hasNext())
                return names[index++];
            return null;
        }

    }
}

public class IteratorPatternDemo {
    public static void main(String[] args) {
        NameRepository nameRepository = new NameRepository();
        Iterator iterator = nameRepository.getIterator();
        while (iterator.hasNext()) {
            String name = (String) iterator.next();
            System.out.println("Name: " + name);
        }
    }
}
//Running result:
Name: Robert
Name: John
Name: Julie
Name: Lora

你可能感兴趣的:(Design,pattern)