20.迭代器模式
作者:互联网
package iterativeModel; import java.util.ArrayList; import java.util.List; import com.sun.xml.internal.fastinfoset.tools.FI_DOM_Or_XML_DOM_SAX_SAXEvent; /* * 迭代模式: * 提供一种方法顺序访问一个聚合对象中各个元素,而不暴露该对象的内部表示 */ public class IterativeModel { public static void main(String[] args) { ConcreateAggregate aggregate = new ConcreateAggregate(); aggregate.items.add("1111"); aggregate.items.add("222"); aggregate.items.add("3333"); Itetator itetator = aggregate.createItetator(); Object o= itetator.first(); System.out.println(o); while(!itetator.isDone()){ System.out.println(itetator.currntItem()); itetator.next(); } } } /* * 迭代器的抽象类 */ abstract class Itetator{ //公共方法 抽象 //获取第一个元素 public abstract Object first(); //获取下一个元素 public abstract Object next(); //是不是遍历完了 public abstract boolean isDone(); //获取当前元素 public abstract Object currntItem(); } /* * 聚集抽象类(比如List) */ abstract class Aggregate{ //创建迭代器 public abstract Itetator createItetator(); } /* *具体迭代器 */ class ConcreateIterator extends Itetator{ //具体的聚合类对象 private ConcreateAggregate aggregate; //当前下标所在位置 private int current = 0; //构造函数 public ConcreateIterator(ConcreateAggregate aggregate){ this.aggregate = aggregate; } /* * 第一个 */ public Object first() { return aggregate.items.get(0); } /* * 下一个 */ public Object next() { ++current; //如果已经完成遍历 if(isDone()){ return null; }else{ return aggregate.items.get(current); } } /* * 是否遍历完 */ public boolean isDone() { return current > aggregate.items.size()-1; } /* * 获取当前元素 */ public Object currntItem() { return aggregate.items.get(current); } } /* * 具体聚合类 比如Arraylist */ class ConcreateAggregate extends Aggregate{ public Itetator createItetator() { return new ConcreateIterator(this); } /* * 模拟聚合对象内部 */ public List items = new ArrayList<>(); /* * 获取总数 */ public int Count(){ return this.items.size(); } /* * 根据下标获取对象 */ public Object get(int index){ return items.get(index); } }
标签:20,迭代,items,abstract,Object,模式,aggregate,return,public 来源: https://blog.51cto.com/u_12198094/2700017