版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/alionsss/article/details/87540221
代码:GitHub |
---|
迭代器设计模式(商品迭代示例)
0. UML结构图
1. 商品迭代示例Code
1.1 迭代器接口
public interface MyIterator {
/**
* 将游标指向第一个
*/
void first();
/**
* 判断是否有下一个元素
*/
boolean hasNext();
/**
* 判断是否是第一个元素
*/
boolean isFirst();
/**
* 判断是否是最后一个元素
*/
boolean isLast();
/**
* 获取当前游标指向的对象,将游标向后移
*/
Object next();
}
1.2 商品聚合类与内部类商品迭代器
public class ProductAggregate {
private List<Object> list = new ArrayList<>();
public void add(Object obj) {
list.add(obj);
}
public void remove(Object obj) {
list.remove(obj);
}
public MyIterator iterator() {
return new ProductIterator();
}
/**
* 商品迭代器
*/
private class ProductIterator implements MyIterator {
/**
* 游标
*/
private int cursor;
@Override
public void first() {
cursor = 0;
}
@Override
public boolean hasNext() {
return cursor < list.size();
}
@Override
public boolean isFirst() {
return cursor == 0;
}
@Override
public boolean isLast() {
return cursor == list.size() - 1;
}
@Override
public Object next() {
Object obj = list.get(cursor);
cursor++;
return obj;
}
}
}
2. 商品迭代示例Test
public class IteratorTest {
public static void main(String[] args) {
ProductAggregate aggregate = new ProductAggregate();
aggregate.add("java");
aggregate.add("python");
aggregate.add("scala");
aggregate.add("golang");
MyIterator iterator = aggregate.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}