`
Flyingh
  • 浏览: 18292 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Iterator

 
阅读更多

Iterator Pattern:其意图是提供一种方法顺序访问一个聚合对象中得各个元素,而又不需要暴露该对象的内部表示.

下面以Boss输出各个Department中的所有Clerk为例(各个部门对Clerk的内部表示不同,如有的用Array,有的用List,Map......):

Clerk.java

package com.flyingh.bean;

import com.flyingh.util.Sex;

public class Clerk {
	private String id;
	private String name;
	private int age;
	private Sex sex;
	private float salary;

	public Clerk(String id, String name, int age, Sex sex, float salary) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.sex = sex;
		this.salary = salary;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Sex getSex() {
		return sex;
	}

	public void setSex(Sex sex) {
		this.sex = sex;
	}

	public float getSalary() {
		return salary;
	}

	public void setSalary(float salary) {
		this.salary = salary;
	}

	@Override
	public String toString() {
		return "Clerk [id=" + id + ", name=" + name + ", age=" + age + ", sex="
				+ sex + ", salary=" + salary + "]";
	}
}

 Sex.java

package com.flyingh.util;

public enum Sex {
	man, woman;
}

 Depart.java

package com.flyingh.idepart;

import java.util.Iterator;

import com.flyingh.bean.Clerk;

public interface Depart {
	Iterator<Clerk> createIterator();
}

 DepartA.java

package com.flyingh.depart;

import java.util.Arrays;
import java.util.Iterator;

import com.flyingh.bean.Clerk;
import com.flyingh.idepart.Depart;
import com.flyingh.util.Sex;

public class DepartA implements Depart {
	private Clerk[] clerks = { new Clerk("A1", "zhangsan", 22, Sex.man, 6500),
			new Clerk("A2", "lisi", 23, Sex.woman, 7800),
			new Clerk("A3", "wangwu", 27, Sex.man, 8500),
			new Clerk("A4", "zhaoliu", 22, Sex.man, 7000) };;

	@Override
	public Iterator<Clerk> createIterator() {
		// TODO Auto-generated method stub
		return Arrays.asList(clerks).iterator();
	}

}

 DepartB.java

package com.flyingh.depart;

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

import com.flyingh.bean.Clerk;
import com.flyingh.idepart.Depart;
import com.flyingh.util.Sex;

public class DepartB implements Depart {
	private List<Clerk> list = new ArrayList<Clerk>();

	public DepartB() {
		super();
		list.add(new Clerk("B1", "sunqi", 21, Sex.woman, 6780));
		list.add(new Clerk("B2", "qianba", 23, Sex.man, 8888));
		list.add(new Clerk("B3", "xiaohua", 21, Sex.woman, 6580));
		list.add(new Clerk("B4", "wuguang", 24, Sex.man, 7450));
	}

	@Override
	public Iterator<Clerk> createIterator() {
		// TODO Auto-generated method stub
		return list.iterator();
	}

}

 DepartC.java

package com.flyingh.depart;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import com.flyingh.bean.Clerk;
import com.flyingh.idepart.Depart;
import com.flyingh.util.Sex;

public class DepartC implements Depart {
	private Map<String, Clerk> map = new HashMap<String, Clerk>();

	public DepartC() {
		super();
		map.put("C1", new Clerk("C1", "haha", 25, Sex.man, 7800));
		map.put("C2", new Clerk("C2", "xixi", 23, Sex.woman, 7000));
		map.put("C3", new Clerk("C3", "hehe", 26, Sex.man, 9000));
		map.put("C4", new Clerk("C4", "heihei", 20, Sex.woman, 6500));
	}

	@Override
	public Iterator<Clerk> createIterator() {
		// TODO Auto-generated method stub
		return map.values().iterator();
	}

}

 Boss.java

package com.flyingh.bean;

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

import com.flyingh.idepart.Depart;

public class Boss {
	private Depart departA;
	private Depart departB;
	private Depart departC;
	private List<Iterator<Clerk>> list = new ArrayList<Iterator<Clerk>>();

	public Boss(Depart departA, Depart departB, Depart departC) {
		super();
		this.departA = departA;
		this.departB = departB;
		this.departC = departC;
		list.add(departA.createIterator());
		list.add(departB.createIterator());
		list.add(departC.createIterator());
	}

	public Depart getDepartA() {
		return departA;
	}

	public void setDepartA(Depart departA) {
		this.departA = departA;
	}

	public Depart getDepartB() {
		return departB;
	}

	public void setDepartB(Depart departB) {
		this.departB = departB;
	}

	public Depart getDepartC() {
		return departC;
	}

	public void setDepartC(Depart departC) {
		this.departC = departC;
	}

	public void printAllClerk() {
		System.out
				.println("*****************all clerks' info:******************");
		for (Iterator<Clerk> iter : list) {
			while (iter.hasNext()) {
				System.out.println(iter.next());
			}
		}
	}

}

 Client.java

package com.flyingh.client;

import com.flyingh.bean.Boss;
import com.flyingh.depart.DepartA;
import com.flyingh.depart.DepartB;
import com.flyingh.depart.DepartC;
import com.flyingh.idepart.Depart;

public class Client {
	public static void main(String[] args) {
		Depart departA = new DepartA();
		Depart departB = new DepartB();
		Depart departC = new DepartC();

		Boss boss = new Boss(departA, departB, departC);
		boss.printAllClerk();

	}
}

 程序运行结果如下:

*****************all clerks' info:******************
Clerk [id=A1, name=zhangsan, age=22, sex=man, salary=6500.0]
Clerk [id=A2, name=lisi, age=23, sex=woman, salary=7800.0]
Clerk [id=A3, name=wangwu, age=27, sex=man, salary=8500.0]
Clerk [id=A4, name=zhaoliu, age=22, sex=man, salary=7000.0]
Clerk [id=B1, name=sunqi, age=21, sex=woman, salary=6780.0]
Clerk [id=B2, name=qianba, age=23, sex=man, salary=8888.0]
Clerk [id=B3, name=xiaohua, age=21, sex=woman, salary=6580.0]
Clerk [id=B4, name=wuguang, age=24, sex=man, salary=7450.0]
Clerk [id=C4, name=heihei, age=20, sex=woman, salary=6500.0]
Clerk [id=C3, name=hehe, age=26, sex=man, salary=9000.0]
Clerk [id=C1, name=haha, age=25, sex=man, salary=7800.0]
Clerk [id=C2, name=xixi, age=23, sex=woman, salary=7000.0]
 
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    iterator_adaptor.pdf

    Boost库中的`iterator_adaptor`是一个强大的工具,用于创建自定义迭代器。这个模板类允许程序员以一种灵活的方式包装现有的迭代器类型,以适应特定的需求或扩展其功能。`iterator_adaptor`的设计理念是基于`iterator...

    iterator嵌套,struts2

    在Struts2框架中,`iterator`标签是一个非常重要的组件,用于遍历各种集合对象,如List、Map等。在上述描述中,开发者遇到了一个关于`iterator`标签嵌套使用的问题,涉及到`LinkedHashMap`存储的数据结构。让我们...

    模拟java ArrayList Iterator

    ArrayList提供了一种高效的方式来管理大量的元素,并且提供了迭代器(Iterator)来遍历这些元素,使得我们可以在不暴露底层实现细节的情况下访问和修改列表中的元素。这个资源的目的是通过模拟Java ArrayList的...

    一个运用Extjs,Struts2, json,iterator技术构建的iterator_jsonDemo2。 将数据从后台传到Extjs表现层。

    一个运用Extjs,Struts2, json,iterator技术构建的iterator_jsonDemo2。iterator_jsonDemo1的链接:http://download.csdn.net/detail/cafebar123/8816409 运用了Extjs,Struts2, json,iterator技术, 将数据从...

    Iterator迭代器讲解

    ### Iterator迭代器详解 #### 一、Iterator简介与概念 在Java编程语言中,`Iterator`接口是一个重要的组件,它提供了遍历集合的基本方法。`Iterator`的主要作用是在不暴露集合内部结构的情况下,顺序访问集合中的...

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

    根据提供的文件信息,本文将深入探讨Java中的`java.util.Iterator`接口及其在集合类中的应用。我们将从以下几个方面进行详细解析: ### 一、集合类的根接口:Collection `Collection`接口是Java集合框架的基础,它...

    struts2中iterator 标签的使用详解

    ### Struts2中Iterator标签的深入解析与应用 在Struts2框架中,`&lt;s:iterator&gt;`标签是一个非常强大的工具,用于在JSP页面上循环遍历集合数据,如列表(List)、数组、Map等。它允许开发者以一种动态且灵活的方式展示...

    关于方法iterator()找不着的问题~~~~~

    在Java编程中,`iterator()`方法是集合框架中非常关键的一部分,主要用于遍历集合中的元素。当你遇到“方法iterator()找不着的问题”时,这通常意味着你在尝试使用`iterator()`时遇到了错误,可能是由于以下几个原因...

    struts2 iterator标签遍历二维数组

    在Struts2框架中,`&lt;s:iterator&gt;`标签被广泛用于遍历集合或数组等数据结构。本文将深入探讨如何使用Struts2中的`&lt;s:iterator&gt;`标签来遍历二维数组,并通过实例代码来具体说明其用法。 ### Struts2 Iterator标签 ##...

    一个使用iterator和json技术的实例

    在Java编程语言中,`Iterator`接口和`Iterable`接口是处理集合数据的重要工具,而JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于数据传输和存储。这个"iterator_jsonDemo"实例结合了这...

    C++使用iterator的例子

    首先,C++标准库定义了五种不同类型的迭代器:输入迭代器(Input Iterator)、输出迭代器(Output Iterator)、前向迭代器(Forward Iterator)、双向迭代器(Bidirectional Iterator)和随机访问迭代器(Random ...

    Java源码分析:深入探讨Iterator模式

    ### Java源码分析:深入探讨Iterator模式 #### 一、引言 在Java编程语言中,集合框架(`java.util`包)提供了多种容器类来存储对象,如`List`、`Set`和`Map`等。为了遍历这些容器中的元素,Java引入了迭代器模式...

    struts2 标签iterator使用

    在Struts2框架中,`&lt;s:iterator&gt;`标签是一个非常强大的工具,用于遍历集合或数组中的元素,尤其在处理列表数据时极为有用。通过本文档提供的代码示例,我们将深入探讨`&lt;s:iterator&gt;`标签的使用方法及其与不同数据...

    使用Iterator接口遍历集合元素

    使用 Iterator 接口遍历集合元素 Java 集合框架中的 Iterator 接口是一种非常重要的接口,它主要用于遍历集合中的元素。Iterator 接口隐藏了各种 Collection 实现类的底层细节,向应用程序提供了遍历 Collection ...

    Map、Set、Iterator迭代详解

    Iterator&lt;String&gt; iterator = list.iterator(); while (iterator.hasNext()) { String element = iterator.next(); System.out.println(element); } ``` ### Java集合框架概述 #### 1. 集合框架简介 Java集合...

    JAVA中的Iterator的用法

    ### JAVA中的Iterator的用法详解 #### 一、概述 在Java编程语言中,`Iterator`接口扮演着遍历集合的重要角色。它提供了一种方式,使得开发人员能够以一致的方式遍历各种类型的集合,无需了解集合的具体实现细节。...

    图解设计Iterator 源代码

    在Java编程语言中,`Iterator`接口是集合框架的核心部分,它允许我们遍历集合中的元素,而无需暴露集合的内部结构。这个设计模式被称为迭代器模式,它为访问聚合对象(如数组、集合等)提供了一种统一的接口。在本...

    for,foreach,iterator的用法和区别

    "for、foreach、iterator的用法和区别" 在 Java 编程语言中,for、foreach 和 iterator 是三种常用的遍历数组和集合的方法。它们之间有相似之处,但也存在着许多不同之处。 相同点:三者都可以用来遍历数组和集合...

    使用Iterator模式将对象转成String (2).docx

    Iterator模式是一种设计模式,主要用于遍历容器(如集合、数组)中的元素,提供了一种统一的访问方式,而无需暴露容器的内部结构。在Java中,`java.util.Iterator`接口就是这种模式的一个典型应用。在给定的文档中,...

    jsp自定义标签iterator遍历list[整理].pdf

    JSP 自定义标签 Iterator 遍历 List 本文主要介绍了在 JSP 中使用自定义标签 Iterator 遍历 List,并对标签的实现过程进行了详细的解释。 标签的概念和作用 在 JSP 中,标签是一种特殊的组件,它可以根据需要执行...

Global site tag (gtag.js) - Google Analytics