设计模式-迭代器模式(Iterator Pattern)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了设计模式-迭代器模式(Iterator Pattern),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3015字,纯文字阅读大概需要5分钟。
内容图文
本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/
迭代器模式简介
迭代器相信大部分人都不陌生,java/c++等很多编程语言的容器类都支持迭代器操作,这个模式就是介绍迭代器实现的细节。
迭代器模式的定义和基本结构
定义:提供一个可以顺序访问一个聚合对象中的各个元素有不暴露器内部实现的方法。
一张来自《Head First》的结构图。
client:调用Iterator对ConcreteAggregate内的元素进行迭代而不需要关系ConcreteAggregate的具体结构。
ConcreteAggregate:某种聚合类的代表,如ArrayList之类。
ConcreteIterator:与某种聚合类关联的迭代器类,实现了Iterator接口,每一种具体的聚合类类型都会有一个对应的ConcreteIterator。
Iterator:这个接口包含了迭代器的一般方法。
Aggregate:包含createIterator()方法,继承了这个接口就表示这个聚合类支持迭代器,调用createIterator()方法就可以获得这个迭代器。
一个简单的实例(java)
不用什么例子了,我们就实现一个针对ArrayList的迭代器当练习就好。
我们先写一个新的类把ArrayList包装一下,就叫MyArrayList,然后实现一个针对MyArrayList的迭代器。
MyArrayList将继承一个Iterable接口,这个接口是java提供的,实现这个接口表示这个聚合类支持迭代器,和上面结构中的Aggregate作用一样,只不过Iterable里的方法叫做iterator()。代码如下。
1 import java.util.ArrayList; 2 import java.util.Iterator; 3 public class MyArrayList implements Iterable<String> { 4 ArrayList<String> arrayList; 5int position=0; 6public MyArrayList(){ 7 arrayList=new ArrayList<String>(); 8 } 9publicvoid addItem(String s){ 10 arrayList.add(s); 11 } 12publicvoid removeItem(int index){ 13 arrayList.remove(index); 14 } 15publicint size(){ 16return arrayList.size(); 17 } 18public String getItem(int index){ 19return arrayList.get(index); 20 } 21 @Override 22public Iterator<String> iterator() { 23returnnew MyArrayListIterator(this); 24 } 25 }
之后实现MyArrayListIterator类,也就是结构图中的ConcreteIterator类,他将继承java提供的Iterator接口,里面有hasNext(),next(),remove()三个方法需要实现,我们实现前两个就可以完成迭代,第三个先直接抛出一个异常把,大家也可以自己实现,反正很简单。
1 import java.util.Iterator; 2 public class MyArrayListIterator implements Iterator<String> { 3 MyArrayList myArrayList; 4int position=0; 5public MyArrayListIterator(MyArrayList m){ 6 myArrayList=m; 7 } 8 @Override 9publicboolean hasNext() { 10if(myArrayList.size()>position) 11returntrue; 12returnfalse; 13 } 14 @Override 15public String next() { 16return myArrayList.getItem(position++); 17 } 18 @Override 19publicvoid remove() { 20thrownew UnsupportedOperationException(); 21 } 22 }
测试代码如下。
1 import java.util.Iterator; 2 public class Test { 3 public static void main(String[] args) { 4 MyArrayList m=new MyArrayList(); 5 m.addItem("first"); 6 m.addItem("second"); 7 m.addItem("tired"); 8 m.addItem("fourth"); 9 m.addItem("fifth"); 10 Iterator<String> it= m.iterator(); 11while(it.hasNext()){ 12 System.out.println(it.next()); 13 } 14 } 15 }
输出如下:
关于for/in语句(Java 5)
在java 5之后,java 给出了一种新的for语句让我们迭代聚合类,只要是支持Iterator的聚合类都可以用这种语句来迭代,简例如下
1 import java.util.Iterator; 2 public class Test { 3 public static void main(String[] args) { 4 MyArrayList m=new MyArrayList(); 5 m.addItem("first"); 6 m.addItem("second"); 7 m.addItem("tired"); 8 m.addItem("fourth"); 9 m.addItem("fifth"); 10 Iterator<String> it= m.iterator(); 11// while(it.hasNext()){ 12// System.out.println(it.next()); 13// } 14for(String s:m){ 15 System.out.println(s); 16 } 17 } 18 }
输出和上面并没有区别。
迭代器模式到此结束,这个模式对程序员来说简直是太熟悉了,超级简单对不对?(^?^*)。
参考资料:《Head First 设计模式》。
原文:http://www.cnblogs.com/coffeeSS/p/5697680.html
内容总结
以上是互联网集市为您收集整理的设计模式-迭代器模式(Iterator Pattern)全部内容,希望文章能够帮你解决设计模式-迭代器模式(Iterator Pattern)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。