设计模式之迭代器模式

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

通常迭代器会存在两个方法:

  1. 判断是否还有下一个元素
  2. 获取下一个元素
«interface»
Iterator
+next()
+boolean hasNext()
«interface»
IterableCollection
+Iterator getIterator()
ConcreteIterator
+next()
+boolean hasNext()
ConcreteCollection
+Iterator getIterator()

实现代码
迭代器接口:

public interface Iterator<E> {   
    boolean hasNext();  //判断是否还有下一个
	E next();     //获取下一个
}

实现迭代器:

public class CustomList<E> {  
    @SuppressWarnings("unchecked")  // 因为不能直接 new E[]。虽然使用强转会造成堆污染
    private E[] elements = (E[]) new Object[16];  
    private int size = 0;  
  
    public void add(E element) {  
        elements[size++] = element;  
    }  
	// 获取该类实现的迭代器
    public Iterator<E> iterator(){  
        return new CustomIterator();  
    }  
  
    private class CustomIterator implements Iterator<E> {  
        int current = 0;  
  
        @Override  
        public boolean hasNext() {  
            return current < size;  
        }  
  
        @Override  
        public E next() {  
            if (!hasNext()) {  
                return null;  
            }  
            return elements[current++];  
        }  
    }  
}
    CustomList<Integer> list=new CustomList<>();  
    list.add(2);  
    list.add(3);  
    Iterator<Integer> iterator = list.iterator();  
    while (iterator.hasNext()) {  
        System.out.println(iterator.next());  
    }  
}

该模式的优点是为各种集合的遍历提供了通用的接口,客户端只需要与迭代器进行交互,而无需了解复杂的数据结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值