详解Java设计模式——迭代器模式
迭代子模式
顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。我们看下关系图:
这个思路和我们常用的一模一样,mycollection中定义了集合的一些操作,myiterator中定义了一系列迭代操作,且持有collection实例,我们来看看实现代码:
两个接口:
public interface collection { public iterator iterator(); /*取得集合元素*/ public object get(int i); /*取得集合大小*/ public int size(); } public interface iterator { //前移 public object previous(); //后移 public object next(); public boolean hasnext(); //取得第一个元素 public object first(); }
两个实现:
public class mycollection implements collection { public string string[] = {"a","b","c","d","e"}; @override public iterator iterator() { return new myiterator(this); } @override public object get(int i) { return string[i]; } @override public int size() { return string.length; } } public class myiterator implements iterator { private collection collection; private int pos = -1; public myiterator(collection collection){ this.collection = collection; } @override public object previous() { if(pos > 0){ pos--; } return collection.get(pos); } @override public object next() { if(pos<collection.size()-1){ pos++; } return collection.get(pos); } @override public boolean hasnext() { if(pos<collection.size()-1){ return true; }else{ return false; } } @override public object first() { pos = 0; return collection.get(pos); } }
测试类:
public class test { public static void main(string[] args) { collection collection = new mycollection(); iterator it = collection.iterator(); while(it.hasnext()){ system.out.println(it.next()); } } }
此处我们貌似模拟了一个集合类的过程,感觉是不是很爽?其实jdk中各个类也都是这些基本的东西,加一些设计模式,再加一些优化放到一起的,只要我们把这些东西学会了,掌握好了,我们也可以写出自己的集合类,甚至框架!
介绍
意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
主要解决:不同的方式来遍历整个整合对象。
何时使用:遍历一个聚合对象。
如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象。
关键代码:定义接口:hasnext, next。
应用实例:java 中的 iterator。
优点:
1、它支持以不同的方式遍历一个聚合对象。
2、迭代器简化了聚合类。
3、在同一个聚合上可以有多个遍历。
4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
缺点:由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
使用场景:
1、访问一个聚合对象的内容而无须暴露它的内部表示。
2、需要为聚合对象提供多种遍历方式。
3、为遍历不同的聚合结构提供一个统一的接口。
注意事项:迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。
以上所述是小编给大家介绍的java设计模式——迭代器模式详解整合,希望对大家有所帮助