第二十五篇 设计模式--迭代器模式

来源:互联网 发布:python量化 入门 编辑:程序博客网 时间:2024/04/28 06:32

定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

代码:

package iterator_model;import java.util.ArrayList;import java.util.List;/** *  * @author naivor *迭代器模式-场景类 */public class IteratorModel {public static void main(String[] args) {List<Object> list=new ArrayList<Object>();list.add("hello");list.add("小明");list.add("老马");list.add("薯条");list.add("下雨");list.add("电脑");ConcreteAggregate aggregate=new ConcreteAggregate(list);ConcreteIterator iterator=new ConcreteIterator(aggregate);Object item=iterator.first();while(!iterator.isDone()){item=iterator.currentItem();System.out.println(item.toString());iterator.next();}}}/** *  * @author naivor *迭代器模式-迭代器抽象类 */abstract class Iterator{ public abstract Object first(); public abstract Object next(); public abstract boolean isDone(); public abstract Object currentItem();}/** *  * @author naivor *迭代器模式-聚集抽象类 */abstract class Aggregate{public abstract Iterator createIterator();}/** *  * @author naivor *迭代器模式-聚集具体类 */class ConcreteAggregate extends Aggregate{private List<Object> items;public ConcreteAggregate(List<Object> items) {this.items=items;}@Overridepublic Iterator createIterator() {// TODO Auto-generated method stubreturn new ConcreteIterator(this);}public int getCount(){return items.size();}public Object getItem(int index){return items.get(index);}}/** *  * @author naivor *迭代器模式-迭代器具体类 */class ConcreteIterator extends Iterator{private ConcreteAggregate aggregate;private int current=0;public ConcreteIterator(ConcreteAggregate aggregate) {this.aggregate=aggregate;}@Overridepublic Object first() {return aggregate.getItem(0);}@Overridepublic Object next() {current++;if (current<=aggregate.getCount()) {return aggregate.getItem(current);}return null;}@Overridepublic boolean isDone() {if (current>=aggregate.getCount()) {return true;}return false;}@Overridepublic Object currentItem() {return aggregate.getItem(current);}}

0 0