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.迭代器模式
原创
©著作权归作者所有:来自51CTO博客作者木子的昼夜的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
JavaScript 20. 错误
try语句测试代码块的错误。catch语句处理错误。throw语句创建自定义错误。finally语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行。
javascript 前端 开发语言 html 代码块