迭代器模式

来源:互联网 发布:非极大值抑制 知乎 编辑:程序博客网 时间:2024/04/30 02:04

我最早接触的设计模式就是迭代器模式了哈;为什么要有迭代器模式呢?看下下面的代码就知道了哈:

//对于一个数组对象sz;我们要怎么遍历呢?public void bianlisz(){for(int i=0;i<sz.length;i++){//对每个sz[i]访问}}//对于一个ArrayList的类对象al;我们要怎么遍历呢?public void bianliAL(){for(int i=0;i<al.size();i++){//对每个al.get(i)访问}}

遍历它们需要知道它们是实现方式,如果我们用迭代器那么遍历他们则不需要关心他们的实现细节了!

假设有两个类geweishu和liangweishu,他们分别用数组和ArrayList来实现,那么我们怎么用iterator来实现呢?

Iterator接口系统有提供,但是我们自己写个MyIterator代替加深理解;

类图如下所示:


备注:因为geweishuIterator类只为geweishu类服务,所以geweishuIterator类可以写成它的一个内部类,同理liangeweishuIterator也是liangweishu的内部类;

代码如下所示:

interface MyIterator{public boolean hasNext();public Object next();}class geweishu{ArrayList<Integer> Items ;MyIterator mi;public geweishu(){Items = new ArrayList<Integer>();for(int i=0;i<10;i++){Items.add(i);}}public MyIterator getIterator(){return new geweishuIterator();}private class geweishuIterator implements MyIterator{int i;int data;public geweishuIterator(){i = 0;}@Overridepublic boolean hasNext() {// TODO Auto-generated method stubif(Items.size() <= i){return false;}return true;}@Overridepublic Object next() {// TODO Auto-generated method stubtry{data = Items.get(i);}catch (IndexOutOfBoundsException e){System.out.println("no data exit");}i++;return data;}}}class liangweishu{int[] Items ;MyIterator mi;public liangweishu(){Items = new int[90];for(int i=10;i<100;i++){Items[i-10] = i;}}public MyIterator getIterator(){return new liangweishuIterator();}private class liangweishuIterator implements MyIterator{int i;int data;public liangweishuIterator(){i = 0;}@Overridepublic boolean hasNext() {// TODO Auto-generated method stubif(Items.length <= i){return false;}return true;}@Overridepublic Object next() {// TODO Auto-generated method stubtry{data = Items[i];}catch (IndexOutOfBoundsException e){System.out.println("no data exit");}i++;return data;}}}测试代码:public class test {public static void main(String[] args) {geweishu gws = new geweishu();liangweishu lws = new liangweishu();MyIterator gwsIterator = gws.getIterator();MyIterator lwsIterator = lws.getIterator();while(gwsIterator.hasNext()){System.out.print(gwsIterator.next());}while(lwsIterator.hasNext()){System.out.print(lwsIterator.next());}}} 

定义:

迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示;





0 0
原创粉丝点击