13.迭代器模式(设计模式笔记)

来源:互联网 发布:2017最新网络综艺节目 编辑:程序博客网 时间:2024/06/14 20:50
场景:
-提供一种可以遍历聚合对象的方式。又称为:游标cursor模式
-聚合对象,存储数据

-迭代器:遍历数据





开发中常见的场景:

-jdk内置的迭代器(List/Set)

public interface MyIterator {void first();//将游标指向第一个元素void next();//将游标指向下一个元素boolean hasNext();//判断是否存在下一个元素boolean isFirst();boolean isLast();Object getCurrentObj();//获取当前游标对应的对象}

/** * 自定义的聚合类 *  * @author Administrator * */public class ConcreteMyAggregate {private List<Object> list = new ArrayList<Object>();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 MyIterator createIteraotr() {return new ConcreteIterator();}// 使用内部类定义迭代器,可以直接使用外部类的属性private class ConcreteIterator implements MyIterator {private int cursor; // 定义游标用于记录遍历的位置@Overridepublic void first() {cursor = 0;}@Overridepublic void next() {if(cursor < list.size()) {cursor++;}}@Overridepublic boolean hasNext() {if (cursor < list.size()) {return true;}return false;}@Overridepublic boolean isFirst() {return cursor == 0 ? true : false;}@Overridepublic boolean isLast() {return cursor == (list.size() - 1) ? true : false;}@Overridepublic Object getCurrentObj() {return list.get(cursor);}}}

public class Client {public static void main(String[] args) {ConcreteMyAggregate cma = new ConcreteMyAggregate();cma.addObject("aa");cma.addObject("bb");cma.addObject("cc");cma.addObject("dd");cma.addObject("ee");MyIterator iter = cma.createIteraotr();while(iter.hasNext()) {System.out.println(iter.getCurrentObj());iter.next();}}}




0 0
原创粉丝点击