企业网站的重要性,工业互联网六大应用场景,品牌战略,南宁建企业网站java设计模式迭代器模式本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中#xff0c;您将深入研究大量的设计模式#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查… java设计模式迭代器模式 本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中您将深入研究大量的设计模式并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因并了解何时以及如何应用模式中的每一个。 在这里查看 目录 1.简介 2.什么是迭代器设计模式 3.实施迭代器设计模式 4.内部和外部迭代器 4.1。 内部迭代器 4.2。 外部迭代器 5.何时使用迭代器设计模式 6. JDK中的迭代器模式 7.下载源代码 1.简介 聚合对象例如列表应该为您提供一种在不暴露其内部结构的情况下访问其元素的方法。 此外您可能想以不同的方式遍历列表具体取决于要完成的工作。 但是即使您可以预料到需要的遍历您也可能不想用用于不同遍历的操作来充实List接口。 您可能还需要在同一列表上进行多个遍历。 通过Iterator模式您可以完成所有这些操作。 此模式的关键思想是将访问和遍历的责任从列表对象中移出并将其放入迭代器对象中。 Iterator类定义用于访问列表元素的接口。 迭代器对象负责跟踪当前元素。 也就是说它知道已经遍历了哪些元素。 2.什么是迭代器设计模式 迭代器设计模式的目的是提供一种在不暴露其基础表示的情况下顺序访问聚合对象的元素的方法。 迭代器模式允许客户端对象以顺序方式访问容器的内容而无需了解其内容的内部表示形式。 上面使用的术语“容器”可以简单地定义为数据或对象的集合。 容器内的对象又可以是集合使其成为集合的集合。 迭代器模式使客户端对象可以遍历对象或容器的此集合而无需容器透露内部如何存储数据。 为此Iterator模式建议应将Container对象设计为以Iterator对象的形式提供一个公共接口以供不同的客户端对象访问其内容。 Iterator对象包含公共方法以允许客户端对象在容器内的对象列表中导航。 图1-类图 迭代器 定义用于访问和遍历元素的接口。 ConcreteIterator 实现Iterator接口。 跟踪聚合中的当前位置。 骨料 定义用于创建Iterator对象的接口。 混凝土骨料 实现Iterator创建接口以返回适当的ConcreteIterator的实例。 3.实施迭代器设计模式 让我们使用Shape类实现Iterator Design Pattern。 我们将使用迭代器存储和迭代Shape对象。 package com.javacodegeeks.patterns.iteratorpattern;public class Shape {private int id;private String name;public Shape(int id, String name){this.id id;this.name name;}public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}Overridepublic String toString(){return ID: id Shape: name;}} 简单的Shape类具有一个id和name作为其属性。 package com.javacodegeeks.patterns.iteratorpattern;public class ShapeStorage {private Shape []shapes new Shape[5];private int index;public void addShape(String name){int i index;shapes[i] new Shape(i,name);}public Shape[] getShapes(){return shapes;}
} 上面的类用于存储Shape对象。 该类包含一个Shape类型的数组为简单起见我们已将该数组初始化为最多5个addShape方法用于向该数组添加Shape对象并将索引加1。 getShapes方法返回Shape类型的数组。 package com.javacodegeeks.patterns.iteratorpattern;import java.util.Iterator;public class ShapeIterator implements IteratorShape{private Shape [] shapes;int pos;public ShapeIterator(Shape []shapes){this.shapes shapes;}Overridepublic boolean hasNext() {if(pos shapes.length || shapes[pos] null)return false;return true;}Overridepublic Shape next() {return shapes[pos];}Overridepublic void remove() {if(pos 0 )throw new IllegalStateException(Illegal position);if(shapes[pos-1] !null){for (int i pos-1; i(shapes.length-1);i){shapes[i] shapes[i1];}shapes[shapes.length-1] null;}}
} 上面的类是Shape类的Iterator 。 这个类实现了Iterator接口和定义的所有方法Iterator接口。 如果还有一个项目 hasNext方法将返回一个boolean 。 next方法从集合中返回下一个项目而remove方法从集合中删除当前项目。 package com.javacodegeeks.patterns.iteratorpattern;public class TestIteratorPattern {public static void main(String[] args) {ShapeStorage storage new ShapeStorage();storage.addShape(Polygon);storage.addShape(Hexagon);storage.addShape(Circle);storage.addShape(Rectangle);storage.addShape(Square);ShapeIterator iterator new ShapeIterator(storage.getShapes());while(iterator.hasNext()){System.out.println(iterator.next());}System.out.println(Apply removing while iterating...);iterator new ShapeIterator(storage.getShapes());while(iterator.hasNext()){System.out.println(iterator.next());iterator.remove();}}} 上面的代码将导致以下输出 ID: 0 Shape: Polygon
ID: 1 Shape: Hexagon
ID: 2 Shape: Circle
ID: 3 Shape: Rectangle
ID: 4 Shape: Square
Apply removing while iterating...
ID: 0 Shape: Polygon
ID: 2 Shape: Circle
ID: 4 Shape: Square 在上面的类中我们创建了一个ShapeStorage对象并将Shape对象存储在其中。 接下来我们创建一个ShapeIterator对象并ShapeIterator分配形状。 我们重复了两次首先不调用remove方法然后再使用remove方法。 输出显示了remove方法的影响。 第一次迭代时迭代器将打印所有形状但是当调用remove方法时它将首先打印当前形状并移至下一个形状。 然后我们在其上调用remove方法该方法将删除当前形状然后迭代器指向下一个可用的形状对象。 因此“在迭代时应用删除...”之后的输出仅显示0、2和4个形状对象。 4.内部和外部迭代器 迭代器可以设计为内部迭代器或外部迭代器。 4.1内部迭代器 集合本身提供允许客户端访问集合中不同对象的方法。 例如 java.util.ResultSet类包含数据还提供诸如next的方法来浏览项目列表。 任何给定时间集合上只能有一个迭代器。 集合必须维护或保存迭代状态。 4.2外部迭代器 迭代功能与集合分离并保留在另一个称为迭代器的对象中。 通常集合本身会根据客户端的输入向客户端返回适当的迭代器对象。 例如 java.util.Vector类的迭代器以Enumeration类型的单独对象的形式定义。 响应elements()方法调用此对象返回到客户端对象。 在任何给定时间给定集合上可以有多个迭代器。 存储迭代状态所涉及的开销与集合无关。 它位于独占的Iterator对象中。 5.何时使用迭代器设计模式 使用迭代器模式 在不暴露其内部表示的情况下访问聚合对象的内容。 支持聚合对象的多次遍历。 为遍历不同的聚合结构提供统一的接口即支持多态迭代。 6. JDK中的迭代器模式 java.util.Iterator java.util.Enumeration 7.下载源代码 这是关于迭代器设计模式的课程。 您可以在此处下载源代码 IteratorPattern-Project 翻译自: https://www.javacodegeeks.com/2015/09/iterator-design-pattern.htmljava设计模式迭代器模式