学习笔记——JAVA设计模式<13>迭代器模式

来源:互联网 发布:java class反编译工具 编辑:程序博客网 时间:2024/05/29 04:45

迭代器模式iterator

  • 场景
    - 提供一种可以遍历聚合对象的方式。又称为游标cursor模式
    - 聚合对象:存储数据
    - 迭代器:遍历数据

结构
–聚合对象:存储数据
–迭代器:遍历数据

代码实现

package studyGFO;/** * 自定义迭代器接口 * @author http://blog.csdn.net/thewaiting * */public interface MyIterator {    void first();//将游标指向第一个    void next();//将游标指向下一个    boolean hasNext();//判断是否存在下一个    boolean isFirst();    boolean isLatst();    Object getCurrentObj();//获取当前游标指向的对象}
package studyGFO;import java.util.ArrayList;import java.util.List;/** * 自定义聚合类 * @author http://blog.csdn.net/thewaiting * */public class ConcreteMyAggregate {    private List<Object> list = new ArrayList<>();    public ConcreteMyAggregate() {        super();    }       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 createrIterator() {        return new ConcreteIterator();    }    //使用内部类自定义的迭代器,可以直接使用外部类的属性方法    private class ConcreteIterator implements MyIterator{        private int cursor;//定义游标记录遍历时位置        @Override        public void first() {            cursor = 0;        }        @Override        public void next() {            if (cursor < list.size()) {                cursor++;            }        }        @Override        public boolean hasNext() {            if (cursor < list.size()) {                return true;            }            return false;        }        @Override        public boolean isFirst() {            return cursor==0?true:false;        }        @Override        public boolean isLatst() {            return  cursor==(list.size()-1)?true:false;        }        @Override        public Object getCurrentObj() {                     return list.get(cursor);        }    }}
package studyGFO;public class Client {    public static void main(String[] args) {        ConcreteMyAggregate c = new ConcreteMyAggregate();        c.addObject("1");        c.addObject("2");        c.addObject("3");        c.addObject("4");        c.addObject("5");        MyIterator iter = c.createrIterator();        while (iter.hasNext()) {            System.out.println(iter.getCurrentObj());            iter.next();        }    }}

开发场景
jdk的迭代器遍历(List/Set)

阅读全文
0 0
原创粉丝点击