迭代器模式(行为型)

 

设计模式的3个分类:创建型模式、结构型模式、行为型模式

迭代器模式(Iterator Pattern)定义:

迭代器模式用于顺序访问聚合对象中各元素,不需要知道集合对象的底层表示(聚合对象不暴露内部表示)。

 

迭代器模式图示:

 

 

代码实现:

/**
 * 迭代接口
 * @param <E>
 */
public interface Iterator<E> {

    E next();
    boolean hasNext();
}

/**
 * 聚合对象接口
 */
public interface Aggregate {

    Iterator createIterator();
}

/**
 * 聚合类1,数据是列表的形式
 */
public class FirstConcreteAggregate implements Aggregate {

    private List<Integer> integerList;

    public FirstConcreteAggregate() {
        integerList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            integerList.add(i);
        }
    }

    @Override
    public Iterator createIterator() {
        return new FirstConcreteIterator(integerList);
    }
}

/**
 * 迭代类1
 * @param <E>
 */
public class FirstConcreteIterator<E> implements Iterator {

    private List<E> eList;
    private int index = 0;

    public FirstConcreteIterator(List<E> eList) {
        this.eList = eList;
    }

    @Override
    public Object next() {
        return eList.get(index++);
    }

    @Override
    public boolean hasNext() {
        return index < eList.size();
    }
}

/**
 * 聚合类2,数据是数组的形式
 */
public class SecondConcreteAggregate implements Aggregate {


    private String[] strings;

    public SecondConcreteAggregate() {
        strings = new String[5];
        strings[0] = "a";
        strings[1] = "b";
        strings[2] = "c";
        strings[3] = "d";
        strings[4] = "e";
    }

    @Override
    public Iterator createIterator() {
        return new SecondConcreteIterator(strings);
    }
}

/**
 * 迭代类2
 * @param <E>
 */
public class SecondConcreteIterator<E> implements Iterator {

    private E[] arrays;
    private int position = 0;

    public SecondConcreteIterator(E[] arrays) {
        this.arrays = arrays;
    }

    @Override
    public Object next() {
        return arrays[position++];
    }

    @Override
    public boolean hasNext() {
        return position < arrays.length;
    }
}

/**
 * Test
 */
public class IteratorPatternDemo {

    public static void main(String[] args) {


        Aggregate firstAggregate = new FirstConcreteAggregate();
        Iterator firstAggregateIterator = firstAggregate.createIterator();

        while (firstAggregateIterator.hasNext()) {
            System.out.print(firstAggregateIterator.next() + " ");
        }

        System.out.println();

        Aggregate secondAggregate = new SecondConcreteAggregate();
        Iterator secondAggregateIterator = secondAggregate.createIterator();
        while (secondAggregateIterator.hasNext()) {
            System.out.print(secondAggregateIterator.next() + " ");
        }

    }
}

 

思考:

某一个具体的设计模式往往针对的是一类问题的解决方案,目标是简化用户的操作(通过接口定义,方法构建等),还是要深入的体会、理解每一个设计模式的精髓。

 

posted @ 2021-01-14 15:20  黑冰台  阅读(124)  评论(0)    收藏  举报