设计模式学习十三:迭代器模式
一.概念
???? 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露该对象的内部方法。
?
二.UML
?
?
三.实例分析
?
???? Aggregate
package com.zzy.iterator;/** * 聚合对象抽象类 * @author eason * * @param <E> */public interface Aggregate<E> {public Iterator<E> createIterator();}
?
???? ArrayAggregate
package com.zzy.iterator;/** * 聚合对象抽象类,用一个数组来反映聚合对象 * @author eason * * @param <E> */public class ArrayAggregate<E> implements Aggregate<E> {private Object[] objs;public ArrayAggregate(Object[] objs) {this.objs = objs;}public Iterator<E> createIterator() {return new ArrayIterator<E>(objs);}}
?
???? ListAggregate
package com.zzy.iterator;import java.util.List;/** * 聚合对象抽象类,用一个List来反映聚合对象 * @author eason * * @param <E> */public class ListAggregate<E> implements Aggregate<E> {private List<E> lists;public ListAggregate(List<E> lists) {this.lists = lists;}public Iterator<E> createIterator() {return new ListIterator<E>(lists);}}
?
???? Iterator
package com.zzy.iterator;/** * 迭代器接口 * @author eason * * @param <E> */public interface Iterator<E> {public boolean hasNext();public E next();}
?
???? ArrayIterator
package com.zzy.iterator;/** * 数组型迭代器 * @author eason * * @param <E> */public class ArrayIterator<E> implements Iterator<E> {private Object[] obj;int position;public ArrayIterator(Object[] obj) {this.obj = obj;}@Overridepublic boolean hasNext() {if(obj != null && position < obj.length) {return true;}return false;}public E next() {return (E) obj[position++];}}
?
???? ListIterator
package com.zzy.iterator;import java.util.List;/** * List型迭代器 * @author eason * * @param <E> */public class ListIterator<E> implements Iterator<E> {private List<E> lists;int current;public ListIterator(List<E> lists) {this.lists = lists;}@Overridepublic boolean hasNext() {if(current < lists.size()) {return true;}return false;}@Overridepublic E next() {return lists.get(current++);}}
?
???? TestIterator
package com.zzy.iterator;import java.util.ArrayList;import java.util.List;/** * 测试类 * @author eason * */public class TestIterator {static String[] arrays = {"O1", "O2", "O3"};static List<String> lists = new ArrayList<String>();static {lists.add("L1");lists.add("L2");lists.add("L3");}public static void main(String[] args) {Iterator<String> arrayIterator = new ArrayAggregate<String>(arrays).createIterator();Iterator<String> listIterator = new ListAggregate<String>(lists).createIterator();printIterator(arrayIterator);printIterator(listIterator);}private static void printIterator(Iterator iterator) {while(iterator.hasNext()) {System.out.println(iterator.next());}}}
?
四.使用场景及使用感受
?