行为型模式----迭代器模式(iterator)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuming226/article/details/91408107
场景

1、提供一种可以遍历聚合对象的方式。又称为:游标cursor模式。
2、聚合对象:存储数据。
3、迭代器:遍历数据。

package GOF.Iterator;

public interface MyIterator {

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

    boolean isFirst();
    boolean isLast();

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

}

package GOF.Iterator;

import java.util.ArrayList;
import java.util.List;

/**
 * 自定义聚合类
 */

public class ConcreteMyAggregate {
    private List<Object> list = new ArrayList<>();

    //获取迭代器
    public MyIterator createIterator() {
        return new ConcreteInterator();
    }

    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;
    }

    private class ConcreteInterator 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 == (list.size() - 1)?true:false;
        }

        @Override
        public boolean isLast() {
            return false;
        }

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

package GOF.Iterator;

public class Client {
    public static void main(String[] args) {
        ConcreteMyAggregate cma = new ConcreteMyAggregate();
        cma.addObject("ad");
        cma.addObject("aa");
        MyIterator iter = cma.createIterator();
        while(iter.hasNext()) {
            Object s = iter.getCurrentObj();
            System.out.println(s);
            iter.next();
        }

    }
}

猜你喜欢

转载自blog.csdn.net/yuming226/article/details/91408107