您的位置:首页 > 其它

设计模式之迭代器模式

2015-10-12 16:35 405 查看

1、核心

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

2、应用场景

JDK中内置迭代器(List/Set)

3、结构

-聚合对象:存储数据

-迭代器:遍历数据



4、代码示例



/**
* 聚合接口
* @author ly1
*
*/
public interface Aggregation {
void add(Object obj);
void remove(Object obj);
Object get(int index);
MyIterator getIterator();
}


/**
* 具体聚合类,将具体迭代器定义为内部类
* @author ly1
*
*/
public class ConcreteAggregation implements Aggregation{
private List list = new ArrayList();

@Override
public void add(Object obj){
list.add(obj);
}

@Override
public void remove(Object obj){
list.remove(obj);
}

@Override
public Object get(int index){
return list.get(index);
}

@Override
public MyIterator getIterator() {

return new ConcreteIterator();
}

private class ConcreteIterator implements MyIterator{
private int cursor = -1;

@Override
public boolean hasNext() {
return ++cursor < list.size();
}

@Override
public Object Current() {
return cursor < list.size() ? list.get(cursor) : null;
}

}

}


/**
* 迭代器接口
* @author ly1
*
*/
public interface MyIterator {
/**
* 判断是有下个元素
* @return
*/
boolean hasNext();

/**
* 获取当前游标指向的对象
* @return
*/
Object Current();
}


/**
* 客户端调用
* @author ly1
*
*/
public class Client {
public static void main(String[] args) {
Aggregation set = new ConcreteAggregation();
set.add(new String("aa"));
set.add(new String("bb"));
set.add(new String("cc"));

//获取迭代器
MyIterator iter = set.getIterator();
while(iter.hasNext()){
System.out.println(iter.Current());
}
}
}

结果:
aa
bb
cc
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: