创建型设计模式之迭代器模式(Iterator)

设计模式之迭代器模式

迭代器的存在是为了遍历数据,但是如何遍历的细节却被隐藏起来。下面先看一段简单的代码:

public class Iterator_01 {

    static class Item{
        private String name;

        public Item(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }
    }

    public static void main(String[] args) {
        Item[] itemArr = {new Item("1"),new Item("2"),new Item("3")};
        for (int i = 0; i < itemArr.length; i++) {
            System.out.println(itemArr[i].getName());
        }
    }
}

这段代码是普通的数组遍历的代码,但是是否继续遍历,是依赖for循环,且显示的获取其中的元素。而迭代器模式却是将访问的细节进行封装,看一段自己实现的迭代器:

public class Iterator_02 {

    static class Item{
        private String name;

        public Item(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }
    }

    interface MyIterator<E>{
        boolean hasNext();

        E next();

    }

    static class MyList<E> {
        Object[] arr;
        int count=0;
        int pointer = 0;

        public MyList(int capacity) {
            arr = new Object[capacity];
        }

        public void add(E e){
            arr[count]=e;
            count++;
        }

        public Iterator_02.MyIterator<E> iterator() {
            return new MyIterator();
        }

        class MyIterator implements Iterator_02.MyIterator<E> {
            @Override
            public boolean hasNext() {
                if (count > 0 && pointer < count) {
                    return true;
                }
                return false;
            }

            @Override
            public E next() {
                E element = (E) arr[pointer];
                pointer++;
                return element;
            }
        }
    }

    public static void main(String[] args) {
        MyList<Item> myList = new MyList<>(4);
        myList.add(new Item("1"));
        myList.add(new Item("2"));
        myList.add(new Item("3"));
        MyIterator<Item> iterator = myList.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next().getName());
        }
    }
}

这里只是一个简单的实现,可以参考java的ArrayList中Itr内类的实现方式。

下面来看看迭代器模式的定义:提供一种方法访问一个容器对象中各个元素,而又不需要暴露改对象的内部细节。

总结:

该设计模式基本上不会自己去实现,java中的容器都已经实现了改设计模式,可以直接使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值