JAVA-设计模式之迭代器模式

来源:互联网 发布:域名的别名 编辑:程序博客网 时间:2024/04/30 23:45

迭代器模式(Iterator):提供一种方法顺序访问聚集对象对象各个元素,而不暴露该对象的内部表示;

 

    

 package caosc.javaModel.Iterator;//迭代器抽象类public abstract class Iterator {public abstract Object first();public abstract Object next();public abstract boolean isDone();public abstract Object currentItem();} package caosc.javaModel.Iterator;//具体的迭代器类public class ConcreteIterator extends Iterator {private ConcreteAggregate concreteAggregate;private int current = 0;public ConcreteIterator(ConcreteAggregate concreteAggregate) {this.concreteAggregate = concreteAggregate;}@Overridepublic Object currentItem() {return concreteAggregate.getItems().get(current);}@Overridepublic Object first() {return concreteAggregate.getItems().get(0);}@Overridepublic boolean isDone() {return current >= concreteAggregate.getItems().size() ? (true): (false);}@Overridepublic Object next() {Object ret = null;current++;if (current < concreteAggregate.getItems().size()) {ret = concreteAggregate.getItems().get(current);}return ret;}} package caosc.javaModel.Iterator;//具体的迭代器类public class ConcreteIteratorDesc extends Iterator {private ConcreteAggregate concreteAggregate;private int current = 0;public ConcreteIteratorDesc(ConcreteAggregate concreteAggregate) {this.concreteAggregate = concreteAggregate;current = concreteAggregate.getItems().size() - 1;}@Overridepublic Object currentItem() {return concreteAggregate.getItems().get(current);}@Overridepublic Object first() {return concreteAggregate.getItems().get(concreteAggregate.getItems().size() - 1);}@Overridepublic boolean isDone() {return current < 0 ? (true) : (false);}@Overridepublic Object next() {Object ret = null;current--;if (current >= 0) {ret = concreteAggregate.getItems().get(current);}return ret;}} package caosc.javaModel.Iterator;//聚集抽象类public abstract class Aggregate {public abstract Iterator createIterator();}   package caosc.javaModel.Iterator;import java.util.ArrayList;import java.util.List;//具体聚集类public class ConcreteAggregate extends Aggregate {private List<Object> items = new ArrayList<Object>();@Overridepublic Iterator createIterator() {return new ConcreteIterator(this);}public int count(){return items.size();}public List<Object> getItems() {return items;}public void setItems(List<Object> items) {this.items = items;}} package caosc.javaModel.Iterator;import java.util.LinkedList;import java.util.List;public class IteratorTest {public static void main(String[] args) {ConcreteAggregate c = new ConcreteAggregate();List<Object> items = new LinkedList<Object>();items.add("毕业");items.add("买房");items.add("卖车");items.add("娶老婆");items.add("娶老婆~~~");c.setItems(items);Iterator   it = new ConcreteIterator(c);while(!it.isDone()){System.out.println(it.currentItem());it.next();}//多种遍历方式时候Iterator   itDesc = new ConcreteIteratorDesc(c);//倒叙while(!itDesc.isDone()){System.out.println(itDesc.currentItem());itDesc.next();}}} 何时使用:1、当需要对聚集有多种遍历方式时候,可以考虑使用迭代器模式;