服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

详解Java设计模式——迭代器模式

2019-06-22 17:04No_Game_No_Life_ JAVA教程

这篇文章主要介绍了Java设计模式——迭代器模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

迭代子模式

顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对象进行遍历访问。我们看下关系图:

详解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设计模式——迭代器模式详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

延伸 · 阅读

精彩推荐