`
zy19982004
  • 浏览: 661823 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:251950
社区版块
存档分类
最新评论

设计模式学习十三:迭代器模式

阅读更多

一.概念

     迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露该对象的内部方法。

 

二.UML

 

  1. Aggregate(集合对象抽象类)。
  2. ConcreteAggregate(聚合对象具体类)。里面必然有某种数据结构,能增删改查所持有的对象。
  3. Iterator(迭代器抽象类)。对外提供顺序访问聚合对象中对象的方法。
  4. ConcreteIterator(具体迭代器类)。

 

三.实例分析

 

     Aggregate

package com.zzy.iterator;

/**
 * 聚合对象抽象类
 * @author eason
 *
 * @param <E>
 */
public interface Aggregate<E> {
	
	public Iterator<E> createIterator();

}

 

     ArrayAggregate

package com.zzy.iterator;

/**
 * 聚合对象抽象类,用一个数组来反映聚合对象
 * @author eason
 *
 * @param <E>
 */
public class ArrayAggregate<E> implements Aggregate<E> {
	
	private Object[] objs;
	
	public ArrayAggregate(Object[] objs) {
		this.objs = objs;
	}

	public Iterator<E> createIterator() {
		return new ArrayIterator<E>(objs);
	}

}

 

     ListAggregate

package com.zzy.iterator;

import java.util.List;

/**
 * 聚合对象抽象类,用一个List来反映聚合对象
 * @author eason
 *
 * @param <E>
 */
public class ListAggregate<E> implements Aggregate<E> {
	
	private List<E> lists;
	
	public ListAggregate(List<E> lists) {
		this.lists = lists;
	}

	public Iterator<E> createIterator() {
		return new ListIterator<E>(lists);
	}

}

 

     Iterator

package com.zzy.iterator;

/**
 * 迭代器接口
 * @author eason
 *
 * @param <E>
 */
public interface Iterator<E> {
	
	public boolean hasNext();
	
	public E next();
	
}

 

     ArrayIterator

package com.zzy.iterator;

/**
 * 数组型迭代器
 * @author eason
 *
 * @param <E>
 */
public class ArrayIterator<E> implements Iterator<E> {
	
	private Object[] obj;
	int position;

	public ArrayIterator(Object[] obj) {
		this.obj = obj;
	}

	@Override
	public boolean hasNext() {
		if(obj != null && position < obj.length) {
			return true;
		}
		return false;
	}

	public E next() {
		return (E) obj[position++];
	}

}

 

     ListIterator

package com.zzy.iterator;

import java.util.List;

/**
 * List型迭代器
 * @author eason
 *
 * @param <E>
 */
public class ListIterator<E> implements Iterator<E> {
	
	private List<E> lists;
	int current;

	public ListIterator(List<E> lists) {
		this.lists = lists;
	}

	@Override
	public boolean hasNext() {
		if(current < lists.size()) {
			return true;
		}
		return false;
	}

	@Override
	public E next() {
		return lists.get(current++);
	}

}

 

     TestIterator

package com.zzy.iterator;

import java.util.ArrayList;
import java.util.List;

/**
 * 测试类
 * @author eason
 *
 */
public class TestIterator {

	static String[] arrays = {"O1", "O2", "O3"};
	static List<String> lists = new ArrayList<String>();
	static {
		lists.add("L1");
		lists.add("L2");
		lists.add("L3");
	}
	
	public static void main(String[] args) {
		
		Iterator<String> arrayIterator = new ArrayAggregate<String>(arrays).createIterator();
		Iterator<String> listIterator = new ListAggregate<String>(lists).createIterator();
		
		printIterator(arrayIterator);
		printIterator(listIterator);
	}
	
	private static void printIterator(Iterator iterator) {
		while(iterator.hasNext()) {
			System.out.println(iterator.next());
		}
	}

}

 

  1. 现在有两个聚合对象:ArrayAggregate(内部用数组来保存对象),ArrayAggregate(内部用List来保存对象)。
  2. 现在client想访问这两聚合对象里面的对象,会分别循环Array和List来得到结果。因为Array和List这两个数据结构本身的区别,client要分别循环Array和List。
  3. 这个时候,我们考虑:将“分别循环”这个操作封装在一个迭代器接口里面;并为ArrayAggregate和ArrayAggregate提供一个来得到自身迭代器的方法createIterator();并提供具体的迭代器实现类,这个就是我们要完成的部分了。
  4. 此时,client拿到一个聚合类,就可以得到其迭代器,从而可以得到聚合对象中的对象了。client完完全全可以不知道迭代器是怎么迭代聚合对象的。

四.使用场景及使用感受

  1. 迭代器模式那元素之间游走的责任从聚合对象交到了迭代器。这让聚合对象代码更加简单,让聚合对象可以更加专注在它应该专注的事情上(管理聚合对象)。
  2. 我们经常使用的for-each遍历,其本质是对聚合对象进行迭代。java为我们提供了迭代器类java.util.Iterator。
  3. 设计原则:单一责任。一个类应该只有一个引起变化的原因。通俗点就是一个类只做一件事情。
  4. 内聚:要来度量一个类或者模块紧密地达到一个目的或责任。当一个类或模块被设计成只支持一组相关的的功能时,我们说它具有高内聚;反正,低内聚。

 

0
0
分享到:
评论

相关推荐

    第二十讲:迭代模式

    在Java、C#等面向对象编程语言中,迭代器模式是常用的一种行为设计模式,它允许我们遍历集合对象的元素,而无需暴露集合的内部结构。 在标题“第二十讲:迭代模式”中,我们可以理解这是一个教学系列的第20部分,...

    设计模式C++学习之迭代器模式(Iterator)

    迭代器模式是软件设计模式中的行为模式之一,它在C++编程中有着广泛的应用。这个模式提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。通过迭代器,用户可以遍历集合中的所有元素,而无需知道如何...

    设计模式之迭代器模式(新)

    迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。...在“设计模式之迭代器模式(新)”的学习中,你将能够深入理解这一模式的精髓,并在实际项目中有效利用它。

    JAVA 设计模式 工厂模式 代理模式 迭代模式 责任链模式 源码

    3. **迭代器模式**:迭代器模式是行为型设计模式,它允许我们遍历集合对象的元素而无需暴露其底层表示。迭代器模式提供了一种方法顺序访问聚合对象中的元素,而无需暴露其底层结构。在Java中,迭代器模式广泛应用于...

    Android设计模式之--迭代器模式

    迭代器模式是软件设计模式中的一种行为模式,它在Android开发中被广泛应用,尤其是在处理集合对象的遍历操作时。这种模式提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java或Android编程中,...

    深入浅出学习Java设计模式之迭代器模式

    迭代器模式是一种设计模式,它的主要目的是在不暴露容器内部结构的情况下,允许用户遍历容器中的元素。在Java中,这种模式被广泛应用于集合类,如List、Set和Map等,通过Iterator接口来实现对集合的遍历。 迭代器...

    23个设计模式之一的迭代器模式-极客学院-java-课件代码,

    迭代器模式是软件设计模式中的行为模式之一,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java编程语言中,迭代器模式的应用尤为广泛,尤其是在处理集合类如ArrayList、LinkedList等时。这...

    设计模式迭代器模式PPT学习教案.pptx

    "设计模式迭代器模式PPT学习教案" 迭代器模式是对象行为型模式,提供一种方法顺序访问一个聚合对象中各个元素,且不用暴露该对象的内部表示。迭代器模式的主要优点是将遍历数据的行为从聚合对象中分离出来,封装在...

    设计模式之迭代器与组合模式

    这份文档以例子的形式讲诉了设计模式之迭代器与组合模式,希望可以帮助学习的人!

    Rust编程艺术:迭代器与闭包的精妙运用

    通过上述内容的学习,我们可以看到 Rust 的迭代器和闭包提供了一种强大而灵活的方式来处理集合和执行函数式编程。它们不仅可以帮助我们编写出更加高效、安全的代码,还能使代码更加易于理解和维护。掌握 Rust 中迭代...

    Headfirst(九)迭代器模式

    总的来说,Headfirst的第九章通过迭代器模式的讲解,让读者了解如何在C++中使用这种模式,同时通过UML类图帮助理解类与类之间的关系,使得设计模式的学习更加直观易懂。掌握迭代器模式,对于编写高效、可维护的代码...

    C#设计模式迭代器示例

    迭代器模式是软件设计模式中的一种行为模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在C#中,迭代器模式的应用非常广泛,尤其是在处理集合类库时。本教程将深入讲解如何在C#中实现迭代器模式。 ...

    迭代器模式demo

    迭代器模式是一种行为设计模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java、Python、C#等编程语言中,迭代器模式被广泛应用于集合类,如ArrayList、LinkedList等,提供了统一的遍历接口,...

    IteratorPattern 迭代设计模式

    迭代器模式(IteratorPattern)是设计模式中的一种行为模式,它提供了一种顺序访问聚合对象元素的方法,同时又不暴露其底层表示。这种模式允许我们遍历集合对象的元素,而无需暴露其内部结构。在Java、C#等面向对象...

    (行为型模式) Iterator 迭代器模式

    为了进一步深入学习迭代器模式和其他设计模式,以下是一些值得推荐的资源: - 《设计模式:可复用面向对象软件的基础》(GoF 四人组著) - 《面向对象分析与设计》(Grady Booch 著) - 《敏捷软件开发:原则、模式...

    Head First 设计模式 (九) 迭代器与组合模式(Iterator & Composite pattern) C++实现

    迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)是设计模式中的两种重要结构型模式,它们在软件设计中有着广泛的应用。这两种模式都属于GoF(Gang of Four)设计模式,旨在解决特定的问题,提升代码...

    iterator-demo 迭代器设计模式demo

    这个“iterator-demo”应该是一个示例项目,用于演示如何在实际编程中应用迭代器模式。下面我们将深入探讨迭代器模式及其在IT领域的应用。 迭代器模式的核心思想是为集合类提供一种统一的访问方式,使得客户代码...

    迭代器Iterator.txt

    根据提供的文件信息,我们可以深入探讨迭代器(Iterator)这一设计模式在Java中的应用与实现...通过学习并理解迭代器模式的原理及其实现方式,开发者可以在实际项目中更好地利用这一模式来优化代码结构,提高程序性能。

    深入浅出学习Java设计模式之迭代器模式[参考].pdf

    迭代器模式是一种设计模式,它的主要目的是在不暴露容器对象的内部细节的前提下,提供一种方法来遍历容器中的元素。这种模式遵循了“单一职责原则”,使得容器专注于管理其内部元素,而遍历的责任则交给迭代器来处理...

    C#学习笔记整理-迭代器模式介绍

    迭代器模式是一种设计模式,它在软件开发中用于顺序访问聚合对象(如列表、集合等)的元素,而无需暴露其内部结构。这种模式允许在不同的聚合对象间使用相同的遍历逻辑,增强了代码的可复用性和灵活性。 在C#中,...

Global site tag (gtag.js) - Google Analytics