设计模式-迭代器模式

参考网站

http://www.runoob.com/design-pattern/factory-pattern.html

什么是迭代器模式?

迭代器模式是Java和.Net编程环境中非常常用的设计模式。这种模式用户顺序访问集合对象的元素,而不需要知道集合对象的底层便是。

迭代器模式属于行为型模式

迭代器模式支持以不同的方式遍历一个聚合对象。简化了聚合类。在同一个聚合上可以有多个遍历。在迭代器模式中,增加新的聚合类和迭代器类都很方便无需修改原有代码。

下面的这个例子,就是对一块面包进行装饰。面包大同小异,但是它有不同的口味,如美式面包,法式面包等等。就是通过在同一块普通面包的基础上进行装饰,因为口味不同,有的加的东西又不一样。但是通过装饰器模式就能很好地解决这种问题。

步骤

创建接口.

Iterator.java 迭代器接口

public interface Iterator {
    boolean hasNext();
    Object next();
}

Container.java 不同类别接口

public interface Container {
    public Iterator getIterator();
}

创建实现了Container接口的实体类。该类有实现了Iterator接口的内部类NameIterator。

NameRepositiory.java 类别实现

public 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() {
            return index < names.length;
        }

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

    }

}

使用NameRepository来获取迭代器,并打印名字。

Client.java 客户端

public class Client {

    public static void main(String[] args) {
        NameRepository nameRepository = new NameRepository();
        for (Iterator iter = nameRepository.getIterator(); iter.hasNext();) {
            String name = (String) iter.next();
            System.out.println("Name:" + name);
        }
    }

}

输出验证。

Name : Robert
Name : John
Name : Julie
Name : Lora

推荐阅读更多精彩内容