迭代器模式

这里写图片描述

这里写图片描述

/**
 * 迭代器接口
 * @author zhangjianbin
 *
 */
public interface MyIterator {

    void first(); //将游标指向第一个元素
    void next();  //将游标指向下一个元素
    boolean hasNext(); //判断是否还有下一个元素

    boolean isFirst(); //判断是否是第一个
    boolean isLast(); //判断是否是最后一个

    Object getCurrentObj(); //获取当前游标指向的对象

}
/**
 * 自定义的聚合类 用于存储数据
 * 
 * @author zhangjianbin
 * 
 */
public class ConcreteMyAggeregate {

    private List<Object> list = new ArrayList<Object>();

    /**
     * 添加数据
     * 
     * @param obj
     */
    public void addObject(Object obj) {
        this.list.add(obj);
    }

    /**
     * 删除数据
     * 
     * @param obj
     */
    public void moveObject(Object obj) {
        this.list.remove(obj);
    }

    /**
     * 设置集合
     * 
     * @param list
     */
    public void setList(List<Object> list) {
        this.list = list;
    }

    /**
     * 获取集合
     * 
     * @return
     */
    public List<Object> getList() {
        return list;
    }


    /**
     * 对外部提供一个获取迭代器的方法
     */
    public MyIterator createIterator(){
        return new ConcreateIteator();
    }

    /**
     * 内部类实现迭代器 好处:可以直接操作外部类的属性
     * 
     * @author zhangjianbin
     * 
     */
    private class ConcreateIteator implements MyIterator {

        private int cursor; // 定义迭代器的指针,用于记录遍历时的位置

        @Override
        public void first() {
            this.cursor = 0;
        }

        @Override
        public void next() {
            if (cursor < list.size()) {
                this.cursor++;
            }
        }

        @Override
        public boolean hasNext() {
            if (cursor < list.size()) {
                return true;
            } else {
                return false;
            }
        }

        @Override
        public boolean isFirst() {
            return this.cursor == 0 ? true : false;
        }

        @Override
        public boolean isLast() {
            return this.cursor == (list.size() - 1) ? true : false;
        }

        @Override
        public Object getCurrentObj() {
            return list.get(cursor);
        }

    }

}
    public static void main(String[] args) {

        ConcreteMyAggeregate cma = new ConcreteMyAggeregate();

        cma.addObject("aa");
        cma.addObject("bb");
        cma.addObject("cc");

        MyIterator myiter = cma.createIterator();

        while (myiter.hasNext()) {
            System.err.println(myiter.getCurrentObj());
            myiter.next();
        }
        /***
         *  aa
            bb
            cc

         */

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值