设计模式入门之迭代器模式Iterator

迭代器模式定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部实现

迭代器模式的结构和说明

Iterator::迭代器接口。定义访问和遍历元素的接口

ConcreteIterator:具体的迭代器实现对象。实现对聚合对象的遍历,并跟踪遍历时的当前位置

Aggregate:聚合对象。定义创建相应迭代器对象的接口

ConcreteAggregate:具体聚合对象。实现创建相应的迭代器对象

实例:一个公司,工资列表是用List实现的,后收购一家公司,工资列表是用Array实现的,现在需要开发一种统一的方式来访问两种不同的聚合对象,上代码

//工资描述模型对象
public class PayModel {
	private String userName;
	private double pay;
	//get and set methods
}
//获取访问聚合接口的接口
public interface Aggregate {
	public Iterator createIterator();
	public int size();
	public Object get(int index);
}
//已有的工资管理对象
public class PayManager implements Aggregate{
	public Iterator createIterator() {
		return new AgIteratorImpl((Aggregate)this);
	}
	private List list = new ArrayList();
	public List getPayList() {
		return list;
	}
	public void calcPay() {
		PayModel pm1 = new PayModel();
		pm1.setPay(3800);
		pm1.setUserName("张三");
		PayModel pm2 = new PayModel();
		pm2.setPay(5800);
		pm2.setUserName("李四");
		list.add(pm1);
		list.add(pm2);
	}
	public Object get(int index) {
		Object obj = null;
		if(index < this.list.size()) {
			obj = this.list.get(index);
		}
		return obj;
	}
	public int size() {
		return this.list.size();
	}
}
//被收购放的工资管理类
public class SalaryManager implements Aggregate {
	public Iterator createIterator() {
		return new AgIteratorImpl((Aggregate)this);
	}
	private PayModel[] pms = null;
	public PayModel[] getPays() {
		return pms;
	}
	public void calcSalary() {
		PayModel pm1 = new PayModel();
		pm1.setPay(2800);
		pm1.setUserName("王五");
		PayModel pm2 = new PayModel();
		pm2.setPay(6800);
		pm2.setUserName("赵六");
		pms = new PayModel[2];
		pms[0] = pm1;
		pms[1] = pm2;
	}
	public Object get(int index) {
		Object obj = null;
		if(index < this.pms.length) {
			obj = this.pms[index];
		}
		return obj;
	}
	public int size() {
		return this.pms.length;
	}
}
//统一访问聚合对象的接口
public interface Iterator {
	public void first();
	public void next();
	public boolean isDone();
	public Object currentItem();
}
//访问数组的统一迭代接口
public class AgIteratorImpl implements Iterator{
	private Aggregate aggregate = null;
	private int index = -1;
	public AgIteratorImpl(Aggregate aggregate) {
		this.aggregate = aggregate;
	}
	public void first() {
		index = 0;
	}
	public void next() {
		if(index < this.aggregate.size()) {
			index = index + 1;
		}
	}
	public boolean isDone() {
		if(index == this.aggregate.size()) {
			return true;
		}
		return false;
	}
	public Object currentItem() {
		return this.aggregate.get(index);
	}
}
//客户端调用
public class Client {
	public static void main(String[] args) {
		PayManager payManager = new PayManager();
		payManager.calcPay();
		System.out.println("集团工资列表:");
		test(payManager.createIterator());

		SalaryManager salaryManager = new SalaryManager();
		salaryManager.calcSalary();
		System.out.println("新收购公司工资列表:");
		test(salaryManager.createIterator());
	}
	private static void test(Iterator it) {
		it.first();
		while(!it.isDone()) {
			Object obj = it.currentItem();
			System.out.println("the obj="+obj);
			it.next();
		}
	}
}
//以上并没有使用Java自带的Iterator,这样可以更好地理解

设计模式入门之迭代器模式Iterator

时间: 2024-08-07 09:01:22

设计模式入门之迭代器模式Iterator的相关文章

设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)

1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合. 集合不一定是均一的.图形用户界面框架中的 Window 对象可以收集任意数量的控制对象 - Menu.Slider 和 Button.并且,集合的实现可以有多种方式:PHP 数字是一个集合,但也是一个散列表,一个链接列表,一个堆栈以及队列. 例子1:电视遥控器的频道遍历 2.问题 如何操纵任意的对象集合? 如一个列表(Lis

[设计模式-行为型]迭代器模式(Iterator)

一句话 用过Java 的Iterator 的方法对这个就不会陌生了. 好处是提供一种方法访问一个容器对象中的各个元素,而又不暴露该容器对象的内部细节. 概括 解析 迭代子模式:迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象.多个对象聚在一起形成的总体称之为聚集,聚集对象是能够包容一组对象的容器对象.迭代子模式将迭代逻辑封装到一个独立的子对象中,从而与聚集本身隔开.迭代子模式简化了聚集的界面.每一个聚集对象都可以有一个或一个以上的迭代子对象,每一个迭代子的迭代状态可以是彼此独立的.

设计模式 - 迭代器模式(iterator pattern) Java 迭代器(Iterator) 详解

迭代器模式(iterator pattern) Java 迭代器(Iterator) 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考迭代器模式(iterator pattern): http://blog.csdn.net/caroline_wendy/article/details/35254643 Java的标准库(util)中包含迭代器接口(iterator interface), import java.util.Iterator; 继承(

设计模式 - 迭代器模式(iterator pattern) 详解

迭代器模式(iterator pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy 迭代器模式(iterator pattern) : 提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露其内部的表示; 建立迭代器接口(iterator interface), 包含hasNext()方法和next()方法; 不同聚合对象的具体的迭代器(concrete iterator), 继承(implements)迭代器接口(iterator in

设计模式 - 迭代器模式(iterator pattern) 扩展 详解

迭代器模式(iterator pattern) 扩展 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考迭代器模式-Java迭代器: http://blog.csdn.net/caroline_wendy/article/details/35268931 扩展迭代器模式, 添加一个Hashtable存储的类. 具体方法: 1. Hashtable的类, 包含创建value()的迭代器(iterator). /** * @time 2014年6月27日

二十四种设计模式:迭代器模式(Iterator Pattern)

迭代器模式(Iterator Pattern) 介绍提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示. 示例有一个Message实体类,某聚合对象内的各个元素均为该实体对象,现在要提供一种方法顺序地访问这个聚合对象中的各个元素. MessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Iterator { /// <summary>

设计模式 - 迭代器模式(iterator pattern) 具体解释

迭代器模式(iterator pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 迭代器模式(iterator pattern) : 提供一种方法顺序訪问一个聚合对象中的各个元素, 而又不暴露其内部的表示; 建立迭代器接口(iterator interface), 包括hasNext()方法和next()方法; 不同聚合对象的详细的迭代器(concrete iterator), 继承(implements)迭代器接口(iterator

设计模式C++实现——迭代器模式

模式定义 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 迭代器模式让我们能游走于聚合内的每一个元素,而又不暴露其内部的表示.把游走的任务放在迭代器上,而不是聚合上.这样简化了聚合的接口和实现,也让责任各得其所. 模式结构: Iterator:迭代器定义访问和遍历元素的接口 ConcreteIterator:具体迭代器实现迭代器接口:对该聚合遍历时跟踪当前位置 Aggregate:聚合定义创建相应的迭代器对象接口 ConcreteAggregate:具体聚合实现

设计模式入门之访问者模式Visitor

Set集合的配置 数据表的创建:表关系一个员工拥有多个身份 create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20) default NULL, last_name VARCHAR(20) default NULL, salary INT default NULL, PRIMARY KEY (id) ); create table CERTIFICATE ( id INT NOT NULL aut