20.迭代器模式

来源:互联网 发布:域名紧急升级 编辑:程序博客网 时间:2024/06/09 20:12
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);}}

原创粉丝点击