Java Iterator的设计模式
2015-06-11 21:34
239 查看
今天看了“Thinking in java”Inner class章节,对Iterator的设计模式有了一点感悟,这里结合自己的拙见分享给感兴趣的各位。
java 和c++比起来,java的内部类不仅能够起到隐藏内部类名的作用,还能自由的调用包含它的外部类成员变量和方法。所以如果有一个Sequence,要能直接访问其起始对象,队列长度,移动当前指针,还要能获取当前对象(比如对ArrayList等结构的操作)我们就用一个Iterator(迭代器)来实现上述操作。
虽然迭代器需要的操作大致相同,但不同队列里的对象类型往往不同,如果非要用Object类也行,或许不同队列对于迭代器还有更多需求,所以可以用一个Selector 接口来让其他迭代器类以自己的方式实现,同样如上一篇博客所说,接口作为外部方法的参数可以提高该方法的复用性。
java 和c++比起来,java的内部类不仅能够起到隐藏内部类名的作用,还能自由的调用包含它的外部类成员变量和方法。所以如果有一个Sequence,要能直接访问其起始对象,队列长度,移动当前指针,还要能获取当前对象(比如对ArrayList等结构的操作)我们就用一个Iterator(迭代器)来实现上述操作。
虽然迭代器需要的操作大致相同,但不同队列里的对象类型往往不同,如果非要用Object类也行,或许不同队列对于迭代器还有更多需求,所以可以用一个Selector 接口来让其他迭代器类以自己的方式实现,同样如上一篇博客所说,接口作为外部方法的参数可以提高该方法的复用性。
interface Selector{ boolean end(); Object current(); void next(); }
public class Sequence{ private Object[] items; private int next =0; public Sequence(int size){items = new Object[size];} public void add(Object x){ if(next<item.length) items[next++] =x; } private class SequenceSelector implements Selector{ private int i=0; public boolean end(){return i == items.length;} public Object current(){return items[i];} public void next(){if(i<items.length())i++;} } private Selector selector(){ return new SequenceSelector(); }//接口Selector 提高了selector()方法的复用性 }
public class TestIteratorPattern{ public static void main(String[] args){ Sequence sequence = new Sequence(10); for(int i=0;i<10;i++) sequence.add(Integer.toString[i]); Selector selector = sequence.selector();//内部类都需要外部类的对象来创建,除非这个内部类是static的 while(!selector.end()) { System.out.print(selector.current()+" "); selector.next(); }//0 1 2 3 4 5 6 7 8 9 } }
相关文章推荐
- 浅谈Struts2下
- 1.SpringMVC开发环境搭建
- playframework1.x的eclipse插件开源-playtools
- java笔记04 语句与流程控制
- java应用中&与&&的区别
- java synchronized详解
- Java面向对象的三大特征
- springmvc 开涛 拦截器
- 浅谈Struts2
- Java Collections-1
- SAE+Java+jetty
- LeetCode_26---Remove Duplicates from Sorted Array
- 冒泡排序(Java版)
- java 泛型学习笔记(一)
- Eclipse在Jar形成和应用程序包
- 二维数组中的查找(Java版)
- springMVC学习(一)springMVC简介
- 快速排序 java实现
- 如何用Eclipse开发SWT应用
- eclipse debug (调试) 学习心得