如何深入理解Java设计模式的迭代器模式

  介绍

如何深入理解Java设计模式的迭代器模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一、什么是迭代器模式

迭代器模式是针对集合对象而生的,对于集合对象而言,肯定会涉及到对集合的添加和删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作放在集合对象中,但这样的话,集合对象既承担太多的责任了,面向对象设计原则中有一条就是单一职责原则,所有我们要尽可能地分离这些职责,用不同的类取承担不同的责任,迭代器模式就是用迭代器类来承担遍历集合的职责。

<强>定义:迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而又无需暴露该对象的内部实现,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据

二,迭代器模式的结构

如何深入理解Java设计模式的迭代器模式

抽象容器角色(<代码> 总):负责提供创建具体迭代器角色的接口,一般是一个接口,提供一个iterator()方法,例如Java中收集的接口,列表接口,设置接口等。

具体容器角色(<代码> ConcreteAggregate>

抽象迭代器角色(<代码>迭代器>

具体迭代器角色(<代码> ConcreteIterator>

三,迭代器模式的使用场景

访问一个集合对象的内容而无需暴露它的内部表示

为遍历不同的集合结构提供一个统一的接口

四,迭代器模式的优缺点

优点:

迭代器模式使得访问一个聚合对象的内容而无需暴露它的内部表示,即迭代抽象。

迭代器模式为遍历不同的集合结构提供了一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作

缺点:

迭代器模式在遍历的同时更改迭代器所在的集合结构会导致出现异常。所以使用foreach语句只能在对集合进行遍历,不能在遍历的同时更改集合中的元素。

五,迭代器模式的实现

抽象聚合类

public  interface  IListCollection   {   ,,,Iterator  GetIterator ();   }

迭代器抽象类

public  interface 迭代器   {   ,,,bool  MoveNext ();   ,,,Object  GetCurrent ();   ,,,void  Next ();   ,,,void 重置();   }

具体聚合类

public  class  ConcreteList : IListCollection   {   ,,,int[],集合;   ,,,public  ConcreteList ()   ,,,{   ,,,,,,,collection =, new  int [], {, 2, 4, 6, 8,};   ,,,}   ,,,public  Iterator  GetIterator ()   ,,,{   ,,,,,,,return  new  ConcreteIterator(这个);   ,,,}   ,,,public  int 长度   ,,,{   ,,,,,,,get  {collection.Length;, return }   ,,,}   ,,,public  int  GetElement (int 指数)   ,,,{   ,,,,,,,return 收集(指数);   ,,,}   }

具体迭代器类

public  class  ConcreteIterator :迭代器   {   ,,,//,迭代器要集合对象进行遍历操作,自然就需要引用集合对象   ,,,private  ConcreteList  _list;   ,,,private  int  _index;   ,,,public  ConcreteIterator (ConcreteList 列表)   ,,,{   ,,,,,,,_list =,列表;   ,,,,,,,_index =, 0;   ,,,}   ,,,public  bool  MoveNext ()   ,,,{   ,,,,,,,if  (_index  & lt;, _list.Length)   ,,,,,,,{   ,,,,,,,,,,,return 真实;   ,,,,,,,}   ,,,,,,,return 假;   ,,,}   ,,,public  Object  GetCurrent ()   ,,,{   ,,,,,,,return  _list.GetElement (_index);   ,,,}   ,,,public  void 重置()   ,,,{   ,,,,,,,_index =, 0;   ,,,}   ,,,public  void  Next ()   ,,,{   ,,,,,,,if  (_index  & lt;, _list.Length)   ,,,,,,,{   ,,,,,,,_ ,,,指数+ +;   ,,,,,,,}   ,,,}   }

如何深入理解Java设计模式的迭代器模式