博客分类:
迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示.
1.当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历时,就应该考虑用迭代器模式。
2.当需要对聚集对象有多种遍历方式时,可以考虑用迭代器模式。
3.迭代器模式在访问数组,集合,列表等数据时,尤其是数据库数据操作时,是非常普遍的应用,
所以各种高级语言 都对它进行了封装,反而给人感觉此模式本身不太常用。
/** * 聚集抽象类 */ public abstract class Aggregate { // 创建迭代器 public abstract Iterator createIteraotr(); }
/** * 具体的聚集类,继承聚集抽象类Aggregate */ public class ConcreteAggregate extends Aggregate{ // 声明一个List泛型变量,用于存放聚合对象 private List<Object> items = new ArrayList<Object>(); @Override public Iterator createIteraotr() { return new ConcreteIterator(this); } // 返回集合总个数 public int count(){ return items.size(); } public List<Object> getItems() { return items; } public void setItems(List<Object> items) { this.items = items; } }
/** * 迭代器抽象类 */ public abstract class Iterator { // 开始对象 public abstract Object first(); // 下一个对象 public abstract Object next(); // 当前对象 public abstract Object currentItem(); // 是否到结尾 public abstract boolean isDone(); }
/** * 具体的迭代器类,继承迭代器抽象类Iterator */ public class ConcreteIterator extends Iterator{ // 定义一个具体的聚集对象 private ConcreteAggregate aggregate; private int current =0 ; // 初始化时将具体的聚集对象传入 public ConcreteIterator(ConcreteAggregate aggregate){ this.aggregate =aggregate; } @Override public Object currentItem() { // 返回当前的聚集对象 return aggregate.getItems().get(current); } @Override public Object first() { // 得到聚集的第一个对象 return aggregate.getItems().get(0); } @Override public boolean isDone() { // 判断当前是否遍历到结尾,到结尾返回true return current>=aggregate.count()?true:false; } @Override public Object next() { // 得到聚集的下一个对象 Object ref = null; current++; if(current<aggregate.count()){ ref = aggregate.getItems().get(current); } return ref; } }
/** * 反向遍历的具体的迭代器类,继承迭代器抽象类Iterator */ public class ConcreteIteratorDesc extends Iterator{ // 定义一个具体的聚集对象 private ConcreteAggregate aggregate; private int current =0 ; // 初始化时将具体的聚集对象传入 public ConcreteIteratorDesc(ConcreteAggregate aggregate){ this.aggregate =aggregate; current = aggregate.count()-1; } @Override public Object currentItem() { // 返回当前的聚集对象 return aggregate.getItems().get(current); } @Override public Object first() { // 得到聚集的第一个对象 return aggregate.getItems().get(aggregate.count()-1); } @Override public boolean isDone() { // 判断当前是否遍历到结尾,到结尾返回true return current<0?true:false; } @Override public Object next() { // 得到聚集的下一个对象 Object ref = null; current--; if(current>=0){ ref = aggregate.getItems().get(current); } return ref; } }
public class Main { public static void main(String[] args) { // 聚集对象(公交车) ConcreteAggregate a = new ConcreteAggregate(); // 对象集合(新上来的乘客) List<Object> items = new ArrayList<Object>(); items.add("大鸟"); items.add("小菜"); items.add("行李"); items.add("老外"); items.add("公交内部员工"); items.add("小偷"); a.setItems(items); // 迭代器对象 Iterator i = new ConcreteIterator(a); // 迭代器第一个对象(从第一个乘客开始) Object item = i.first(); while(!i.isDone()){ System.out.println(i.currentItem()+"请买车票"); i.next(); } System.out.println("------------反向遍历---------------"); //-----反向遍历------------------- Iterator iDesc = new ConcreteIteratorDesc(a); // 迭代器第一个对象(从最后一个乘客开始) Object item2 = iDesc.first(); while(!iDesc.isDone()){ System.out.println(iDesc.currentItem()+"请买车票"); iDesc.next(); } } }
输出结果如下:
大鸟请买车票 小菜请买车票 行李请买车票 老外请买车票 公交内部员工请买车票 小偷请买车票 ------------反向遍历--------------- 小偷请买车票 公交内部员工请买车票 老外请买车票 行李请买车票 小菜请买车票 大鸟请买车票
相关推荐
以下是关于JAVA设计模式中提及的四种模式——工厂模式、代理模式、迭代器模式以及责任链模式的详细说明。 1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当创建...
迭代模式是一种行为设计模式,它允许我们通过统一的接口遍历集合对象的元素,而无需暴露其底层表示。在Java、C#等面向对象语言中,迭代器模式被广泛使用,尤其是在集合类库中,如ArrayList、LinkedList等。下面我们...
迭代模式是一种设计模式,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java、C#等面向对象编程语言中,迭代器模式是常用的一种行为设计模式,它允许我们遍历集合对象的元素,而无需暴露集合...
在这个话题中,我们将深入探讨如何利用组合模式(Composite Pattern)和迭代模式(Iterator Pattern)来构建和遍历树结构。 **组合模式**是面向对象设计模式的一种,它允许我们处理部分和整体的关系。在树形结构中...
迭代模式是一种行为设计模式,它允许我们通过统一的接口遍历集合对象的元素,而无需暴露其底层结构。在Java中,迭代模式通常与集合框架一起使用,例如ArrayList、LinkedList等,它们都提供了迭代器来遍历元素。下面...
迭代器模式 迭代器模式是23种设计模式之一,属于行为型模式。它提供了一种访问聚合对象元素的方式,而不需要暴露该对象的内部实现。迭代器模式的主要目的是让开发者能够轻松地遍历聚合对象中的元素,而不需要关心...
迭代器模式是软件设计模式中的一种行为模式,它在编程中扮演着重要的角色,尤其是在处理集合数据时。迭代器模式的核心思想是提供一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。这种模式使得用户可以在不...
迭代器模式是一种设计模式,它在软件工程中扮演着重要的角色,特别是在处理集合或容器类对象的遍历操作时。这种模式提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。在Java、C#等面向对象语言中,...
迭代器模式(IteratorPattern)是设计模式中的一种行为模式,它提供了一种顺序访问聚合对象元素的方法,同时又不暴露其底层表示。这种模式允许我们遍历集合对象的元素,而无需暴露其内部结构。在Java、C#等面向对象...
迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java、C#等面向对象语言中,迭代器模式被广泛应用于容器类,如ArrayList、LinkedList等,使得我们可以方便...
迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。在Java中,迭代器模式是通过接口实现的,这使得我们可以遍历任何实现了`Iterable`接口的对象,例如集合框架中的`...
在这个主题中,我们主要探讨了如何利用组合模式(Composite Pattern)构建二叉树,并通过迭代器模式(Iterator Pattern)来实现对树的遍历,包括前序、中序和后序遍历。这些是设计模式中的经典应用,对于理解和掌握...
迭代器模式是一种设计模式,属于行为设计模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java、C#等面向对象语言中,迭代器模式被广泛应用于容器类,如ArrayList、LinkedList等,使得我们可以...
迭代器模式是软件设计模式中的一种行为模式,它在C#等面向对象编程语言中有着广泛的应用。这个模式的主要目标是允许用户遍历一个聚合对象(如数组、集合或列表)的所有元素,而无需了解底层的实现细节。下面将详细...
迭代器模式是一种行为设计模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java、C#等面向对象编程语言中,迭代器模式被广泛应用于集合类库,如ArrayList、LinkedList等。这个"迭代器模式demo...
标题中的“【图像分割】基于迭代条件模式ICM算法实现图像分割matlab代码.zip”指出,这个压缩包包含了一个使用迭代条件模式(Iterated Conditional Modes, ICM)算法进行图像分割的MATLAB实现。图像分割是图像处理和...
迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。这种模式允许我们遍历集合中的每个元素,同时保持集合本身抽象,不需了解其内部结构。 在Java、C#等面向对象语言...
迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在“设计模式之迭代器模式(新)”中,我们将深入探讨这种模式的核心概念、实现方式以及它在实际编程中的应用...