用到的知识:迭代器模式
迭代模式:提供一种可以遍历聚合对象的方式
1)聚合对象:存储数据
2)迭代器:遍历数据
UML图:
自定义迭代器接口:
package com.bjsxt.iterator;
public interface CutomIterator {//自定义迭代器接口
void frist();//获取游标第一个元素
void next();//将游标指向下个元素
boolean hasNext();//是否有下一个元素
boolean isFrist();//是否是第一个元素
boolean isLast();//是否是最后一个元素
Object getCursorObject();//获取游标的对象
}
聚合类:
package com.bjsxt.iterator;
import java.util.ArrayList;
import java.util.List;
public class Aggregation {//聚合类
public List<Object> list=new ArrayList<>();//存放聚合对象
//添加对象
public void addObject(Object obj){
this.list.add(obj);
}
//删除对象
public void removeObject(Object obj){
this.list.remove(obj);
}
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
//获取迭代器
public CutomIterator getIterator() {
return new MybuilderIterator();
}
//内部类迭代器类,可以直接获取外部类的对象
class MybuilderIterator implements CutomIterator{
//定义游标
private int cursor;
@Override
public void frist() {
cursor=0;
}
@Override
public void next() {//指向下一个元素
if(cursor<list.size()){
cursor++;
}
}
@Override
public boolean hasNext() {
if (cursor<list.size()){
return true;
}
return false;
}
@Override
public boolean isFrist() {
if (cursor==0){
return true;
}
return false;
}
@Override
public boolean isLast() {
if (cursor==list.size()-1){
return true;
}
return false;
}
@Override
public Object getCursorObject() {
return list.get(cursor);
}
}
}
实现类:
package com.bjsxt.iterator;
import java.util.Date;
public class Client {//实现类
public static void main(String[] args) {
//创建聚合类
Aggregation aggregation=new Aggregation();
aggregation.addObject("aa");
aggregation.addObject("bb");
aggregation.addObject("cc");
aggregation.addObject(new Date());
CutomIterator iterator = aggregation.getIterator();//获取自定义的迭代器
while (iterator.hasNext()){
System.out.println(iterator.getCursorObject());//获取
iterator.next();
}
}
}