标签:
设计模式之第6章-迭代器模式(Java实现)
“我已经过时了,就不要讲了吧,现在java自带有迭代器,还有什么好讲的呢?”“虽然已经有了,但是具体细节呢?知道实现机理岂不美哉?”“好吧好吧。”(迭代器闷闷不乐的答应下来。作者吃着小笼包,咂咂嘴道:哼,想偷懒,窗户都没有~)。
迭代器模式之自我介绍
正如你们所见,我目前已经没落了,基本上没人会单独写一个迭代器,除非是产品性质的研发,我的定义如下:Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.意思呢,就是:提供一种方法,访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。
迭代器是为容器服务的,那么什么又是容器呢?所谓容器就是能容纳对象的所有的类型的统称。例如Collection集合类型、Set类型等等,这些在《Thinking in Java》里面的第Chapter 11里面有所介绍,想要深入了解容器的话还需要看Chapter 17,如果没有记错的话应该是这个,好了,继续,我呢,就是为了解决遍历这些容器而诞生的,当然,这些都是JDK1.0.8时代的事情了,现在jdk中早已有了迭代器的实现,所以呐,我也就是个过时的产物~下面上类图先:
我提供了便利容器的方便性,容器只要管理增减就可以了,需要遍历时交给我。下面具体分析类图:
迭代器模式之自我分析
缺点么,还真没有,优点如下:
迭代器之实现
既然如此的不是很常用,那就直接进行通用代码的实现吧,首先是抽象迭代器:
1 public interface Iterator{ 2 //遍历下一个元素 3 public object next(); 4 //是否已经到最后一个元素 5 public boolean hasNext(); 6 //删除当前指向的元素 7 public boolean remove(); 8 }
接下来是具体的迭代器实现代码:
1 public class ConcreteIterator implements Iterator{ 2 private Vector vector = new Vector(); 3 //定义当前游标 4 public int cursor = 0; 5 @SuppressWarnings("unchecked") 6 public ConcreteIterator(Vector vector){ 7 this.vector = vector; 8 } 9 10 //判断是否是最后一个 11 public boolean hasNext(){ 12 if(this.cursor == this.vector.size()){ 13 return false; 14 } 15 else 16 return true; 17 } 18 19 //返回下一个元素 20 public Object next(){ 21 Object result = null; 22 if(this.hasNext()){ 23 result = this.vector.get(this.cursor++); 24 } 25 else 26 result = null; 27 28 return result; 29 } 30 31 //删除当前元素 32 public boolean remove(){ 33 this.vector.remove(this.cursor); 34 return true; 35 } 36 37 38 }
然后是抽象容器类:
1 public interface Aggregate{ 2 //是容器必有的元素增加 3 public void add(Object object); 4 //减少元素 5 public void remove(Object object); 6 //由迭代器遍历 7 public Iterator iterator(): 8 }
最后是具体容器的实现类:
1 public class ConcreteAggregate implements Aggregate{ 2 //容器对象的容器 3 private Vector vector = new Vector(); 4 //增加一个元素 5 public void add(Object object){ 6 this.vector.add(object); 7 } 8 //减少一个元素 9 public void remove(Object object){ 10 this.remove(object); 11 } 12 //返回迭代对象 13 public void add(Object object){ 14 return new ConcreteIterator(this.vector); 15 } 16 }
以上就是具体的通用方法的实现了。
迭代器模式应用场合
虽然我这种模式不再使用,但是迭代这种容器却是使用的很频繁的,经常编程的你们想必也见到过很多~下面就来介绍一下具体的使用场合,其实我可以用来:
以上。欲知后式为何物,且听下回分解。
PS:本博客欢迎转发,但请注明博客地址及作者~
博客地址:http://www.cnblogs.com/voidy/
<。)#)))≦
标签:
原文地址:http://www.cnblogs.com/voidy/p/4232259.html