JAVA设计模式之迭代器模式

来源:互联网 发布:淘宝店铺关闭怎么激活 编辑:程序博客网 时间:2024/06/08 19:03

– 自定义迭代器

package com.imust.iterator;/** * 自定义的迭代器接口 * @author  Zachary (为上帝所心仪的人) * @date    2017年9月8日 * @project shejimoshi * @package com.imust.iterator */public interface MyIterator {    void first(); //将游标指向第一个元素    void next(); //将游标指向下一个元素    boolean hasNext(); //判断是否存在下一个元素    boolean isFirst();    boolean isLast();    Object getCurrentObj();//获取当前游标指向的对象}

自定义的聚合类

package com.imust.iterator;import java.util.ArrayList;import java.util.List;/** * 自定义的聚合类 * @author  Zachary (为上帝所心仪的人) * @date    2017年9月8日 * @project shejimoshi * @package com.imust.iterator */public class ConcreateMyAggregate {    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 createIterator(){        return new ConcreateIterator();    }    //使用内部类定义迭代器,可以直接使用外部类的属性    private class ConcreateIterator 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 isLast() {            return cursor == (list.size() -1)? true :false;        }        @Override        public Object getCurrentObj() {            return list.get(cursor);        }    }}

测试类

package com.imust.iterator;public class Client {    public static void main(String[] args) {        ConcreateMyAggregate cma = new ConcreateMyAggregate();        cma.addObject("aa");        cma.addObject("bb");        cma.addObject("cc");        MyIterator iter = cma.createIterator();        while(iter.hasNext()){            System.out.println(iter.getCurrentObj());            iter.next();        }    }}
原创粉丝点击