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

设计模式:迭代器模式

程序员文章站 2022-04-18 15:29:13
迭代器模式又称游标模式,该模式可以顺序访问一个集合中元素而不必暴露集合内部对象。 在Java集合框架Collection中广泛使用该模式来遍历内部元素。所有熟悉java语言的应该都了解并应用过。 采用迭代器遍历对象。 迭代器结构: 聚合对象(collection):存储数据 迭代器:遍历数据 例子: ......

  迭代器模式又称游标模式,该模式可以顺序访问一个集合中元素而不必暴露集合内部对象。

在java集合框架collection中广泛使用该模式来遍历内部元素。所有熟悉java语言的应该都了解并应用过。

采用迭代器遍历对象。

  迭代器结构:

   聚合对象(collection):存储数据

   迭代器:遍历数据

  设计模式:迭代器模式

例子:

  简单自己实现一个列表元素的迭代器。

  

public interface myiterator {
    //指向第一个元素
    void first();
    //指向下一个元素
    object next();
    //是否存在下一个元素
    boolean hasnext();
    boolean isfirst();
    boolean islast();
}

  

/**
 * 自定义集合对象
 */
public class mycollection {

    private list<object> list = new arraylist<>();

    public void add(object obj) {
        list.add(obj);
    }

    public void remove(object obj) {
        list.remove(obj);
    }

    public list<object> getlist() {
        return list;
    }

    public void setlist(list<object> list) {
        this.list = list;
    }

    public myiterator iterator() {
        return new selfiterator();
    }
    
    class selfiterator implements myiterator {
        //定义一个索引位置表示游标
        private int index;

        //指向第一个元素即索引为0
        @override
        public void first() {
            index = 0;
        }

        @override
        public object next() {
            if (index < list.size()) {
                object obj = list.get(index);
                index++;
                return obj;
            }
            return null;
        }

        @override
        public boolean hasnext() {
            return index < list.size();
        }

        @override
        public boolean isfirst() {
            return index == 0;
        }

        @override
        public boolean islast() {
            return index == (list.size() - 1);
        }
    }
}

  简化起见,在这个集合对象封装一个数组,初始化时就创建好该数组

public class client {

    public static void main(string[] args) {
        mycollection collection = new mycollection();
        collection.add("1");
        collection.add("2");
        collection.add("3");

        myiterator iterator = collection.iterator();
        while (iterator.hasnext()){
            system.out.println(iterator.next());
        }
    }
}

  迭代器模式使遍历算法和集合对象分开,单独被封装在迭代子对象中,外部只需要调用迭代子对象的方法。

迭代和集合对象解耦。新增迭代方式的时候可以不用修改集合对象,只需新增迭代器对象即可,符合开闭原则。