`
samsongbest
  • 浏览: 171503 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

15 行为模式 - 迭代子(Iterator)模式

 
阅读更多

1.用意

迭代子模式又叫游标模式,可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象。

 

2.类图

白箱聚集与外禀迭代子

黑箱聚集与内禀迭代子


 

3.代码

白箱聚集与外禀迭代子

/*
 * 抽象聚集角色
 */
public abstract class Aggregate {
	public Iterator createIterator() {
		return null;
	}
}


/*
 * 具体聚集角色
 */
public class ConcreteAggregate extends Aggregate {
	private Object[] objs = { "Monk Tang", "Monkey", "Pigsy", "Sandy", "Horse" };

	public Iterator createIterator() {
		return new ConcreteIterator(this);
	}

	public Object getElement(int index) {
		if (index < objs.length) {
			return objs[index];
		} else {
			return null;
		}
	}

	public int size() {
		return objs.length;
	}
}


/*
 * 抽象迭代子角色
 */
public interface Iterator {
	void first();

	void next();

	boolean isDone();

	Object currentItem();
}


/*
 * 具体迭代子角色
 */
public class ConcreteIterator implements Iterator {
	private ConcreteAggregate agg;
	private int index = 0;
	private int size = 0;

	public ConcreteIterator(ConcreteAggregate agg) {
		this.agg = agg;
		size = agg.size();
		index = 0;
	}

	/*
	 * 移动到第一个元素
	 * @see com.javapatterns.iterator.whitebox.Iterator#first()
	 */
	public void first() {
		index = 0;
	}

	/*
	 * 移动到下一个元素
	 * @see com.javapatterns.iterator.whitebox.Iterator#next()
	 */
	public void next() {
		if (index < size) {
			index++;
		}
	}

	/*
	 * 是否是第一个元素
	 * @see com.javapatterns.iterator.whitebox.Iterator#isDone()
	 */
	public boolean isDone() {
		return (index >= size);
	}

	/*
	 * 返还当前元素
	 * @see com.javapatterns.iterator.whitebox.Iterator#currentItem()
	 */
	public Object currentItem() {
		return agg.getElement(index);
	}
}


/*
 * 测试类
 */
public class Test {

	public static void main(String[] args) {
		ConcreteAggregate agg = new ConcreteAggregate();
		Iterator ite = agg.createIterator();
		for (int i = 0; i < agg.size(); i++) {
			S.s(ite.currentItem());
			ite.next();
		}
	}
}

 输出:


 

 

黑箱聚集与内禀迭代子

/*
 * 抽象聚集角色
 */
public abstract class Aggregate {
	public abstract Iterator createIterator();
}


/*
 * 具体聚集角色
 */
public class ConcreteAggregate extends Aggregate {
	private Object[] objs = { "Monk Tang", "Monkey", "Pigsy", "Sandy", "Horse" };

	public Iterator createIterator() {
		return new ConcreteIterator();
	}

	/*
	 * 具体迭代子角色
	 */
	private class ConcreteIterator implements Iterator {
	
		private int currentIndex = 0;

		/*
		 * 移动到第一个元素
		 * @see com.javapatterns.iterator.whitebox.Iterator#first()
		 */
		public void first() {
			currentIndex = 0;
		}

		/*
		 * 移动到下一个元素
		 * @see com.javapatterns.iterator.whitebox.Iterator#next()
		 */
		public void next() {
			if (currentIndex < objs.length) {
				currentIndex++;
			}
		}

		/*
		 * 是否是最后一个元素
		 * @see com.javapatterns.iterator.whitebox.Iterator#isDone()
		 */
		public boolean isDone() {
			return (currentIndex == objs.length);
		}

		/*
		 * 返还当前元素
		 * @see com.javapatterns.iterator.whitebox.Iterator#currentItem()
		 */
		public Object currentItem() {
			return objs[currentIndex];
		}
	}
}


/*
 * 抽象迭代子角色
 */
public interface Iterator {
	void first();

	void next();

	boolean isDone();

	Object currentItem();
}



/*
 * 测试类
 */
public class Test {
	private Iterator it;
	private Aggregate agg = new ConcreteAggregate();

	public void operation() {
		it = agg.createIterator();
		while (!it.isDone()) {
			S.s(it.currentItem().toString());
			it.next();
		}
	}

	public static void main(String[] args) {
		Test test = new Test();
		test.operation();
	}
}
 

 

 

z

  • 大小: 83 KB
  • 大小: 40.1 KB
  • 大小: 10.8 KB
分享到:
评论

相关推荐

    设计模式--迭代器模式java例子

    迭代器模式是一种行为设计模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java中,迭代器模式广泛应用于集合框架,如ArrayList、LinkedList等。本示例将深入探讨如何在Java中实现和使用迭代器...

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

    ### (行为型模式) Iterator 迭代器模式 #### 概述 在软件工程领域,设计模式被广泛应用于解决常见的编程问题。其中,“迭代器模式”作为一种行为型设计模式,在处理集合类对象时发挥着重要作用。本文将详细介绍...

    设计模式-迭代器模式(讲解及其实现代码)

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

    java常用设计模式-迭代器模式

    Java 迭代器模式是一种行为设计模式,它提供了一种访问集合对象元素的方法,而不需要暴露该对象的内部表示。该模式适用于需要遍历集合对象的场景,例如数组、列表、树等。 迭代器模式的主要优点是: 1. 避免了集合...

    java-util-iterator.pdf java-util-iterator.pdf

    ### 三、Iterator模式的优势 使用`Iterator`模式遍历集合具有以下优势: 1. **解耦访问逻辑**:客户端代码无需了解集合的具体实现,这使得修改集合实现时不会影响到客户端代码。 2. **简化客户端代码**:通过`...

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

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

    设计模式-迭代器模式

    1. **分离遍历行为**:迭代器模式将遍历操作与聚合对象的定义分离,使得两者可以独立变化。 2. **支持多种遍历方式**:可以为同一聚合对象提供不同类型的迭代器,实现不同的遍历顺序。 3. **增强了对聚合类的透明性*...

    java设计模式--迭代器设计模式.docx

    迭代器模式是软件设计模式中的一种行为模式,其主要目的是为了在不暴露聚合对象内部结构的情况下,提供一种顺序访问聚合对象中各个元素的方式。在Java中,迭代器模式被广泛应用于集合类,如ArrayList、LinkedList等...

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

    迭代器模式是软件设计模式中的一种行为模式,它在编程中扮演着重要的角色,尤其是在处理集合数据时。迭代器模式的核心思想是提供一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。这种模式使得用户可以在不...

    设计模式(C#)之迭代器模式(Iterator Pattern)

    迭代器模式是软件设计模式中的一种行为模式,它在C#等面向对象编程语言中有着广泛的应用。这个模式的主要目标是允许用户遍历一个聚合对象(如数组、集合或列表)的所有元素,而无需了解底层的实现细节。下面将详细...

    IteratorPattern 迭代设计模式

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

    iterator-demo 迭代器设计模式demo

    迭代器设计模式是一种常用的行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。这个“iterator-demo”应该是一个示例项目,用于演示如何在实际编程中应用迭代器模式。下面我们将深入...

    java基础 集合-22-迭代器设计模式

    迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而不暴露其底层表示。在Java中,迭代器模式广泛用于遍历集合类,如ArrayList、LinkedList、HashSet和HashMap等。通过迭代器,我们可以...

    Iterator Pattern(迭代模式)

    迭代模式是一种行为设计模式,它允许我们通过统一的接口遍历集合对象的元素,而无需暴露其底层表示。在Java、C#等面向对象语言中,迭代器模式被广泛使用,尤其是在集合类库中,如ArrayList、LinkedList等。下面我们...

    09-迭代器模式.pdf

    迭代器模式(Iterator Pattern),也被称作游标(Cursor)模式,是软件工程设计模式中的一种行为型模式。该模式的主要目的是提供一种方法来访问一个容器(container)对象中的各个元素,而无需暴露容器的内部结构或...

    【Java设计模式】(1)迭代器模式Iterator

    迭代器模式(Iterator Pattern)是Java设计模式中的行为模式之一,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java中,迭代器模式被广泛应用于集合类,如ArrayList、LinkedList等,通过...

    设计模式专题之(二十三)迭代器模式---设计模式迭代器模式示例代码(python--c++)

    迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。在本文中,我们将深入探讨迭代器模式的概念,并通过Python和C++两种编程语言展示其实现。 首先,理解迭代器模式...

    C#面向对象设计模式纵横谈\18 行为型模式Iterator迭代器模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不... 这是第18节:行为型模式Iterator迭代器模式

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

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

Global site tag (gtag.js) - Google Analytics