您的位置:首页 > 编程语言 > Java开发

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

2013-08-14 14:30 351 查看
迭代器模式(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;
}

@Override
public Object currentItem() {
return concreteAggregate.getItems().get(current);
}

@Override
public Object first() {
return concreteAggregate.getItems().get(0);
}

@Override
public boolean isDone() {
return current >= concreteAggregate.getItems().size() ? (true)
: (false);
}

@Override
public 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;
}

@Override
public Object currentItem() {
return concreteAggregate.getItems().get(current);
}

@Override
public Object first() {
return concreteAggregate.getItems().get(
concreteAggregate.getItems().size() - 1);
}

@Override
public boolean isDone() {
return current < 0 ? (true) : (false);
}

@Override
public 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>();

@Override
public 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、当需要对聚集有多种遍历方式时候,可以考虑使用迭代器模式;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: