欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java设计模式--迭代器模式

程序员文章站 2022-06-11 17:46:03
迭代器模式:提供一种方法顺序来访问一个聚合对象中的元素,并且不暴露该对象的内部表示。当我们需要去遍历一个对象时就可以考虑使用迭代器模式。 聚集抽象类 具体聚集类。 迭代抽象类。 具体迭代类。 测试类。 测试结果: abcd 其实迭代器模式在java中早有实现,java中的集合类实现了Iterable ......

迭代器模式:提供一种方法顺序来访问一个聚合对象中的元素,并且不暴露该对象的内部表示。当我们需要去遍历一个对象时就可以考虑使用迭代器模式。

聚集抽象类

public interface collection {
    iterator createiterator();
}

 

具体聚集类。

public class concretecollection implements collection {

    private list<object> list = new arraylist<>();
    @override
    public iterator createiterator() {
        return new concreteiterator(this);
    }
    //获取集合大小
    public int count(){
        return list.size();
    }
    //添加元素
    public void setlist(object object){
        list.add(object);
    }
    //获取元素
    public object getlist(int index){
       return list.get(index);
    }
}

 

迭代抽象类。

public interface iterator {
    //第一个节点
    object first();
    //下一个节点
    object next();
    //是否遍历完成
    boolean isdone();
    //当前节点
    object currentitem();

}

 

具体迭代类。

public class concreteiterator implements iterator {

    private concretecollection concretecollection;
    private int current = 0;

    public concreteiterator(concretecollection concretecollection){
        this.concretecollection = concretecollection;
    }
    @override
    public object first() {
        return concretecollection.getlist(0);
    }

    @override
    public object next() {
        current++;
        if(current<concretecollection.count()){
            return concretecollection.getlist(current);
        }else {
            return null;
        }
    }

    @override
    public boolean isdone() {
        return current >=concretecollection.count()? true:false;
    }

    @override
    public object currentitem() {
        return concretecollection.getlist(current);
    }
}

 

测试类。

public class test {
    public static void main(string[] args) {
        concretecollection concretecollection = new concretecollection();
        concretecollection.setlist("a");
        concretecollection.setlist("b");
        concretecollection.setlist("c");
        concretecollection.setlist("d");
        concreteiterator concreteiterator = new concreteiterator(concretecollection);
        object first = concreteiterator.first();
        while (!concreteiterator.isdone()){
            system.out.println(concreteiterator.currentitem());
            concreteiterator.next();
        }
    }
}

测试结果:

a
b
c
d

  其实迭代器模式在java中早有实现,java中的集合类实现了iterable接口,而iterable接口中声明了一个iterator方法,返回一个iterator,这个iterator接口中定义了遍历的相关方法,和上面的例子中的iterator接口类似。