设计模式——迭代器模式

迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,让我们能游走与聚合内的每一个元素,而又不暴露其内部的表示。
       把游走的任务放在迭代器上,而不是聚合上这样简化了聚合的接口和实现,也让责任各得其所
       提供一种可以遍历聚合对象的方式,又称为:游标cursor模式
       聚合对象:存储数据
       迭代器:遍历数据
       JDK内置iterator  正向迭代  反向迭代
       设计原则:一个类应该只有一个引起变化的原因。

看一个简单的迭代器模式Demo:

public interface MyIterator {
	Object first();
	Object last();
	Object next();
	boolean hasNext();
	boolean isFirst();
	boolean isLast();

}

public class ConcreteAggregate {
	private List<Object> list;

	public ConcreteAggregate() {
		list = new ArrayList<>();
	}
	public void add(Object obj) {
		list.add(obj);
	}
	public void remove(Object obj) {
		list.remove(obj);
	}

	public void setList(List<Object> list) {
		this.list = list;
	}
	public List<Object> getList() {
		return list;
	}

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

	//使用内部类来实现具体的iterator  面向接口编程
	public class ConcreteIterator implements MyIterator {
		private int cur;

		@Override
		public Object first() {
			return list.get(0);
		}@Override
		public boolean hasNext() {
			return cur<list.size()? true : false;
		}@Override
		public boolean isFirst() {
			return cur==0? true : false;
		}@Override
		public boolean isLast() {
			return cur==list.size()-1? true : false;
		}@Override
		public Object last() {
			return list.get(list.size()-1);
		}@Override
		public Object next() {
			if(cur < list.size())
				return list.get(cur++);
			else
				return null;
		}

	}

}

public class Client {
	public static void main(String[] args) {
		ConcreteAggregate cag = new ConcreteAggregate();
		for(int i=0; i<26; i++) {
			cag.add((char)(i+‘a‘)+"");
		}
		MyIterator iterator = cag.createIterator();
		System.out.print(iterator.first());
		iterator.next();
		while(iterator.hasNext()) {
			System.out.print(" " + iterator.next());
		}
	}
}

运行结果:

a b c d e f g h i j k l m n o p q r s t u v w x y z

时间: 2024-08-06 11:08:35

设计模式——迭代器模式的相关文章

设计模式 - 迭代器模式(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日

【C#设计模式-迭代器模式】

一.概述:迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. 二.适用性: 访问一个聚合对象的内容而无需暴露它的内部表示 支持对聚合对象的多种遍历 为遍历不同的聚合结构提供一个统一的接口 三.结构: 迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口 具体迭代器角色(Concrete Iteraror):具体迭代器角色实现了迭代器接口,并需要记录遍历中的当前位置. 聚合角色(Aggregate):聚合角色负责定义获得迭代

19. 星际争霸之php设计模式--迭代器模式

题记==============================================================================本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦! 本文地址:http://www.cnblogs.com/davidhhuan/p/4248206.html============================================

JavaScript设计模式 - 迭代器模式

迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示. 迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素 许多浏览器都支持 Javascript 的 Array.prototype.forEach 迭代器可以分为 内部迭代器 和 外部迭代器 一.jQuery 中的迭代器 1 $.each( [1,2,3,4], function (i, n) { 2 console.log( "当

PHP设计模式——迭代器模式

声明:本系列博客参考资料<大话设计模式>,作者程杰. 迭代器模式:迭代器模式是遍历集合的成熟模式,迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的工作时遍历并选择序列中的对象,而客户端程序员不必知道或关心该集合序列底层的结构. UML类图: 角色: Iterator(迭代器):迭代器定义访问和遍历元素的接口 ConcreteIterator(具体迭代器):具体迭代器实现迭代器接口,对该聚合遍历时跟踪当前位置 Aggregate (聚合):聚合定义创建相应迭代器对象的接口(可选)

设计模式-迭代器模式(Iterator Pattern)

本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/ 迭代器模式简介 迭代器相信大部分人都不陌生,java/c++等很多编程语言的容器类都支持迭代器操作,这个模式就是介绍迭代器实现的细节. 迭代器模式的定义和基本结构 定义:提供一个可以顺序访问一个聚合对象中的各个元素有不暴露器内部实现的方法. 一张来自<Head First>的结构图. client:调用Iterator对ConcreteAggregate内的元素进行迭代而不需要关系Concr

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

能够游走于聚合内的每一个元素,同时还可以提供多种不同的遍历方式. 基本概念: 就是提供一种方法顺序访问一个聚合对象中的各个元素,而不是暴露其内部的表示. 使用迭代器模式的优点: 遍历集合或者数组: 忽略集合和数组的结构: 提供不同的遍历方式: 符合单一职责原则. 迭代器角色: 抽象迭代器:该接口必须定义实现迭代功能的最小定义方法集. 具体迭代器:迭代器接口Iterator的实现类.可以根据具体情况加以实现. 抽象聚合类:定义基本功能以及提供类似Iterator iterator()的方法. 具体

Java设计模式——迭代器模式

概述 网上大部分人说迭代模式的时候,总是以某一种可遍历的对象为例进行介绍.这是可行的,这也是迭代模式的基本原型.当我看到<Head Frist设计模式>中迭代模式的时候,感觉要是能从另一个角度来说明,可能更能够体现迭代模式的威力所在. 本文介绍的这种迭代模式,倒是更像是适配器-迭代器模式.希望于你有益~ 版权说明 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:Coding-Naga发表日期: 2016年3月4日链接:http://blog.csdn.net/lemo