迭代器模式的作用:
提供一种方法顺序访问一个聚合对象中的各个元素,而又无须暴露该对象的内部表示。
迭代器模式优点:
1.支持以不同的方式遍历一个聚合对象。
2.在迭代器模式中,增加新的聚合类和迭代器类都很方便。
迭代器模式缺点:
1.增加新的聚合类需要对应的增加新的迭代器类,类的个数成对增加,增加系统的复杂性。
迭代器模式角色:
1.抽象迭代器角色:一般来说,它是一个抽象类或者一个接口,它抽象出遍历元素所需要的方法。
2.具体迭代器角色:它实现抽象迭代器角色里方法,它是抽象迭代器角色的具体化。
3.抽象容器角色:一般来说,它是一个抽象类或者一个接口,它抽象出容器操作需要的方法。
4.具体容器角色:它实现抽象容器角色里方法,它是抽象容器角色的具体化。
/** * 抽象迭代器角色 * Created by Administrator */ public interface Iterator { void first(); void next(); boolean hasNex(); Boolean isFirst(); Boolean isLast(); Object getCurrentObject(); }
/** * 具体迭代器角色 * Created by Administrator */ public class ConcreteIterator implements Iterator{ private List<Object> list; public ConcreteIterator(List<Object> list) { this.list = list; } private int index; @Override public void first() { index=0; } @Override public void next() { if(index<list.size()){ index++; } } @Override public boolean hasNex() { if(index<list.size()){ return true; }else { return false; } } @Override public Boolean isFirst() { return index==0?true:false; } @Override public Boolean isLast() { return index==(list.size()-1)?true:false; } @Override public Object getCurrentObject() { return list.get(index); } }
/** * 抽象容器角色 * Created by Administrator */ public interface Container { public void addObject(Object o); public Object get(int index); public Iterator iterator(); public int getSize(); }
/** * 具体容器角色 * Created by Administrator */ public class ConcreteContainer implements Container{ private List<Object> list; public ConcreteContainer() { list=new ArrayList<Object>(); } @Override public void addObject(Object o) { list.add(o); } @Override public Object get(int index) { if(index<list.size()){ return list.get(index); }else{ return null; } } @Override public Iterator iterator() { return new ConcreteIterator(this.list); } @Override public int getSize() { return list.size(); } }
//调用 ConcreteContainer concreteContainer=new ConcreteContainer(); concreteContainer.addObject("郑秀晶"); concreteContainer.addObject("林允儿"); concreteContainer.addObject("迪丽热巴"); //遍历 Iterator iterator=concreteContainer.iterator(); while (iterator.hasNex()){ Log.d("Iterator","可爱漂亮的妹子:"+iterator.getCurrentObject()); iterator.next(); }
结果: