`

设计模式之迭代器模式

 
阅读更多
迭代器模式
提供一种可以遍历聚合对象的方式,又称cursor模式。迭代器模式(Iterator)就是分离了聚合对象的遍历行为,抽象出一个迭代器来负责这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部数据。
聚合对象:存储数据
迭代器:遍历数据
 
结构图
聚合抽象类一般以内部类的方式存储
 
/**
 * 定义迭代器接口
 */
public interface MyIterator {
    void first();
    void next();
    boolean hasNext();

    boolean isFirst();
    boolean isLast();

    Object getCurrentObject();
}


/
 * 聚合类
 */
public class ConcreteAggregate {

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


    public void addConcrete(Object obj){
        list.add(obj);
    }

    public MyIterator createIterator(){
        return new ConcretIterator();
    }

    private class ConcretIterator implements MyIterator{

        private int cursor; //定义游标,用于记录变量时的位置

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

        @Override
        public void next() {
            if(cursor == list.size()){
                return;
            }
            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()? true:false;

        }

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


public class Client {

    public static void main(String[] args){
        ConcreteAggregate ca = new ConcreteAggregate();
        ca.addConcrete("zhang");
        ca.addConcrete("lisi");
        ca.addConcrete("wangWS");

        MyIterator iterator = ca.createIterator();
        while (iterator.hasNext()){
            System.out.println(iterator.getCurrentObject());
            iterator.next();
        }
    }
}

 
 
  • 大小: 47.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics