前言:【模式总览】——————————by xingoo

  模式意图

  提供一个方法按顺序遍历一个集合内的元素,而又不需要暴露该对象的内部表示。

  应用场景

  1 访问一个聚合的对象,而不需要暴露对象的内部表示

  2 支持对聚合对象的多种遍历

  3 对遍历不同的对象,提供统一的接口。

  模式结构

  Iterator 定义访问的接口

/**
* 抽象的迭代,有判断结束和下一个,获取当前元素等函数
* @author xingoo
*
*/
interface Iterator{
void first();
void next();
boolean isDone();
Object currentItem();
}

  ConcreteIterator 具体的迭代器,跟踪聚合内的元素

/**
* 具体的迭代类
* @author xingoo
*
*/
class ConcreteIterator implements Iterator{
private ConreteAggregate agg;
private int index = ;
private int size = ; public ConcreteIterator(ConreteAggregate agg) {
this.agg = agg;
size = agg.size();
index = ;
} public void first() {
index = ;
} public void next() {
if(index < size){
index++;
}
} public boolean isDone() {
return (index >= size);
} public Object currentItem() {
return agg.getElement(index);
} }

  Aggregate 提供聚合的接口

/**
* 聚合的类
* @author xingoo
*
*/
abstract class Aggregate{
public Iterator createIterator(){
return null;
}
}

  ConcreteAggregate 具体的聚合

/**
* 具体的聚合对象,拥有大小,创建迭代子等函数
* @author xingoo
*
*/
class ConreteAggregate extends Aggregate{
private Object[] obj = {"test1","test2","test3","test4"};
public Iterator createIterator(){
return new ConcreteIterator(this);
}
public Object getElement(int index){
if(index < obj.length){
return obj[index];
}else{
return null;
}
}
public int size(){
return obj.length;
}
}

  全部代码

 package com.xingoo.Iterator;
/**
* 聚合的类
* @author xingoo
*
*/
abstract class Aggregate{
public Iterator createIterator(){
return null;
}
}
/**
* 抽象的迭代,有判断结束和下一个,获取当前元素等函数
* @author xingoo
*
*/
interface Iterator{
void first();
void next();
boolean isDone();
Object currentItem();
}
/**
* 具体的聚合对象,拥有大小,创建迭代子等函数
* @author xingoo
*
*/
class ConreteAggregate extends Aggregate{
private Object[] obj = {"test1","test2","test3","test4"};
public Iterator createIterator(){
return new ConcreteIterator(this);
}
public Object getElement(int index){
if(index < obj.length){
return obj[index];
}else{
return null;
}
}
public int size(){
return obj.length;
}
}
/**
* 具体的迭代类
* @author xingoo
*
*/
class ConcreteIterator implements Iterator{
private ConreteAggregate agg;
private int index = ;
private int size = ; public ConcreteIterator(ConreteAggregate agg) {
this.agg = agg;
size = agg.size();
index = ;
} public void first() {
index = ;
} public void next() {
if(index < size){
index++;
}
} public boolean isDone() {
return (index >= size);
} public Object currentItem() {
return agg.getElement(index);
} }
/**
* 客户端 使用方法
* @author xingoo
*
*/
public class Client {
private Iterator it;
private Aggregate agg = new ConreteAggregate();
public void operation(){
it = agg.createIterator();
while(!it.isDone()){
System.out.println(it.currentItem().toString());
it.next();
}
}
public static void main(String[] args) {
Client client = new Client();
client.operation();
}
}

  运行结果

test1
test2
test3
test4

【设计模式】—— 迭代模式Iterator的更多相关文章

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

    迭代模式(iterator pattern) Java 迭代器(Iterator) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考迭代器模式(ite ...

  2. javascript设计模式-迭代器模式(Iterator)

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 19迭代模式Iterator

    一.什么是迭代模式 Iterator模式也叫迭代模式,是行为模式之 一,它把对容器中包含的内部对象的访问委让给 外部类,使用Iterator(遍历)按顺序进行遍历 访问的设计模式. 二.不使用迭代模式 ...

  4. [工作中的设计模式]迭代子模式Iterator

    一.模式解析 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象 1.迭代子模式一般用于对集合框架的访问,常用的集合框架为lis ...

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

    迭代器模式(iterator pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 迭代器模式(iterator pattern) : 提供一 ...

  6. 24种设计模式--迭代模式【Iterator Pattern】

    周五下午,我正在看技术网站,第六感官发觉有人在身后,扭头一看,我 C,老大站在背后,赶忙站起来,“王经理,你找我?” 我说. “哦,在看技术呀.有个事情找你谈一下,你到我办公室来一下.” 老大说. 到 ...

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

    --------------------------------------------------------------------- 1.场景问题 考虑这样一个问题: 9个学生对象分别通过数组存 ...

  8. PHP设计模式——迭代模式

    声明:这一系列的博客引用<大话设计模式>.程洁作者. 迭代器模式:迭代器模式是遍历集合的成熟模式.迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的工作时遍历并选择序列中的对 ...

  9. C#设计模式——迭代器模式(Iterator Pattern)

    一.概述在软件开发过程中,我们可能会希望在不暴露一个集合对象内部结构的同时,可以让外部代码透明地访问其中包含的元素.迭代器模式可以解决这一问题.二.迭代器模式迭代器模式提供一种方法顺序访问一个集合对象 ...

随机推荐

  1. java中sleep()方法的解析

    Thread.sleep(3000); 就是指让当前正在运行的占用cpu时间片的线程挂起3000ms,把cpu的时间片交给其他线程,但是并没有指定把CPU的时间片接下来到底交给哪个线程,而是让这些线程 ...

  2. js倒计时,页面刷新时,不会从头计时

    最近不忙,瞎鼓捣...哈哈 这里利用了H5的本地存储 localStorage,取秒数直接用了php的time()方法,就懒得用js取了. 把第一次访问页面时的时间存在客户端,然后再刷新的时候,比较用 ...

  3. 大数据入门第二十二天——spark(二)RDD算子(1)

    一.RDD概述 1.什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的 ...

  4. OWASP移动安全漏洞Top 10

    •脆弱的服务器端安全控制 在OWASP排第一的漏洞是“脆弱的服务器端安全控制”,顾名思义,就是没有以一个安全的方式从移动应用程序向服务器端发送数据,或在发送数据时暴露了一些敏感的API.例如,考虑对一 ...

  5. python基础2之字符串、列表、字典、集合

    内容概要: 一.python2 or 3 二.字符串拼接 三.字符串 四.列表.元祖 五.字典 六.集合 七.练习 一.python2 or python3 目前大多使用python2.7,随着时间的 ...

  6. [Deep-Learning-with-Python] Keras高级概念

    Keras API 目前为止,介绍的神经网络模型都是通过Sequential模型来实现的.Sequential模型假设神经网络模型只有一个输入一个输出,而且模型的网络层是线性堆叠在一起的. 这是一个经 ...

  7. Scala学习(三)----数组相关操作

    数组相关操作 摘要: 本篇主要学习如何在Scala中操作数组.Java和C++程序员通常会选用数组或近似的结构(比如数组列表或向量)来收集一组元素.在Scala中,我们的选择更多,不过现在我们先假定不 ...

  8. 设计模式 笔记 备忘录模式 Memento

    //---------------------------15/04/27---------------------------- //Memento 备忘录模式----对象行为型模式 /* 1:意图 ...

  9. Java设计模式之适配器设计模式(项目升级案例)

    今天是我学习到Java设计模式中的第三个设计模式了,但是天气又开始变得狂热起来,对于我这个凉爽惯了的青藏人来说,又是非常闹心的一件事儿,好了不管怎么样,目标还是目标(争取把23种Java设计模式接触一 ...

  10. 对html第一次尝试

    1.对于写文档                         修改后缀为html,双击进入为网页模式. 2.编写网页 1)新建 2)基本格式 <!DOCTYPE html><!-- ...