本文主要是参考《图解设计模式》写的读书笔记;

            开发中我用到遍历集合时候,无非我常用的就是简单的for循环,foreach,iterator 这三种方式进行遍历!

当然这三种的效率:

学习Iterator模式时候,书上给的案例是这样的,一个书架上面放满了书,书下面有个指针!

      大概就这样,画的不好!

      

    首先这书架也就相当于是一个集合,集合中得book就是相当于集合元素,下面的指针就相当于Iterator中得hasNext();

为甚有那么简单的for循环不用,非要搞Iterator干嘛,我第一次时候就这么问的??    

看案例吧:

    1.先编写一个包含了迭代方法的抽象类

package iterator.Method;

public interface Aggregate {
public abstract Iterator iterator();
}

  2.编写实体类

  

package iterator.Model;
/**
*
* @author zengrong
*
*/
public class Book { private String name; public Book(String name) {
super();
this.name = name;
} public String getName() {
return name;
} @Override
public String toString() {
return "Book [name=" + name + "]";
} }
package iterator.Model;

import iterator.Method.Aggregate;
import iterator.Method.Iterator;
import iterator.Method.IteratorBookshelf; public class BookShelf implements Aggregate {
private Book books[];
//定义指针的位置
private int last=0;
//获取数据额书 public Book getBookAt(int index) {
return books[index];
}
public BookShelf(int maxsize) {
this.books=new Book[maxsize];
}
//获取长度
public int getLength() {
return last;
}
//添加书
public void appendBook(Book book) {
this.books[last]=book;
last++;
}
//添加
@Override
public Iterator iterator() { return new IteratorBookshelf(this);
}
}

3.编写抽象的iterator

package iterator.Method;
/**
*
* @author zengrong
* 对迭代接口设计二个方法
*/
public interface Iterator {
public abstract boolean has
Next();
public abstract Object next();
}

   

package iterator.Method;

import iterator.Model.Book;
import iterator.Model.BookShelf; /*
* 遍历书架上面书的类
*/
public class IteratorBookshelf implements Iterator{
private BookShelf bookShelf;
private int index; public IteratorBookshelf(BookShelf bookShelf) {
super();
this.bookShelf = bookShelf;
} public boolean hasNext() {
if(index<bookShelf.getLength()){
return true;
}else{
return false;}
} public Object next() {
Book book = bookShelf.getBookAt(index);
index++;
return book ;
} }

4 main

package Main;

import iterator.Method.Iterator;
import iterator.Model.Book;
import iterator.Model.BookShelf; /**
*
* @author zengrong
* 测试
*/
public class App {
public static void main(String[] args) {
BookShelf bookShelf=new BookShelf(5);
Book book =new Book("苍老师日语全集");
Book book2 =new Book("电影AV无码");
Book book3 =new Book("小泽从你的全世界路过");
Book book4 =new Book("自己动手丰衣足食");
Book book5 =new Book("给我一个杠杆我会撬动你");
bookShelf.appendBook(book);
bookShelf.appendBook(book2);
bookShelf.appendBook(book3);
bookShelf.appendBook(book4);
bookShelf.appendBook(book5); Iterator it = bookShelf.iterator();
while(it.hasNext()){
Book bo = (Book) it.next();
System.out.println(bo);
} }
}

 

总结:

`1.Iterator模式是用于遍历集合类的标准访问方法。它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。

2.客户端本身是不维护遍历集合的指正,是由iterator来进行维护的!

3.集合的种类进行改变时候我们的遍历是不需要改动的!

    

1.设计模式-------Iterator的更多相关文章

  1. [设计模式] Iterator - 迭代器模式:由一份奥利奥早餐联想到的设计模式

    Iterator - 迭代器模式 目录 前言 回顾 UML 类图 代码分析 抽象的 UML 类图 思考 前言 这是一包奥利奥(数组),里面藏了很多块奥利奥饼干(数组中的元素),我将它们放在一个碟子上慢 ...

  2. [C# 设计模式] Iterator - 迭代器模式:我与一份奥利奥早餐的故事

    Iterator - 迭代器模式 目录 前言 回顾 UML 类图 代码分析 抽象的 UML 类图 思考 前言 这是一包奥利奥(数组),里面藏了很多块奥利奥饼干(数组中的元素),我将它们放在一个碟子上慢 ...

  3. 使用C# (.NET Core) 实现迭代器设计模式 (Iterator Pattern)

    本文的概念来自深入浅出设计模式一书 项目需求 有两个饭店合并了, 它们各自有自己的菜单. 饭店合并之后要保留这两份菜单. 这两个菜单是这样的: 菜单项MenuItem的代码是这样的: 最初我们是这样设 ...

  4. 设计模式-Iterator

    本文参(chao)考(xi)<图解设计模式> 结城浩 (作者) 杨文轩 (译者) 1.Iterator 模式 迭代器作用于集合,是用来遍历集合元素的对象. 迭代器模式提供一种方法顺序访问一 ...

  5. java设计模式-Iterator

    Iterator模式 主要是用在容器的遍历上,其他的地方都不怎么用:理解一下,会用了就可以了:   1.背景 请动手自己写一个可以动态添加对象的容器: 代码: ArrayList.java(是自己实现 ...

  6. [C++设计模式] iterator 迭代器模式

    迭代器模式定义:提供一种方法顺序訪问一个聚合对象中各个元素,而又不须要暴露该对象. 迭代器分内部迭代器和外部迭代器.内部迭代器与对象耦合紧密,不推荐使用. 外部迭代器与聚合容器的内部对象松耦合,推荐使 ...

  7. C++设计模式-Iterator迭代器模式

    ref: http://www.cnblogs.com/onlycxue/archive/2013/12/25/3490738.html

  8. Java设计模式之Iterator模式

    分类: [java]2013-07-15 10:58 917人阅读 评论(0) 收藏 举报 所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式.本文以java中的容器为例 ...

  9. Java 设计模式实现 不错的引用

    这段时间有兴趣重新温习一下设计模式在Java中的实现,碰巧看到一个不错的设计模式总结,这里引用一下作为参考. 创建型模式: JAVA设计模式-Singleton JAVA设计模式-Factory JA ...

随机推荐

  1. 【Zookeeper】分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理 ...

  2. Manacher回文串算法学习记录

    FROM:  http://hi.baidu.com/chenwenwen0210/item/482c84396476f0e02f8ec230 #include<stdio.h> #inc ...

  3. Windows远程CentOS桌面

    Windows远程CentOS桌面 1.VNC 服务器配置 1) 安装vncserver yum install -y vnc-server 2) 修改配置 vi /etc/sysconfig/vnc ...

  4. 两种“新型”的javaweb后门(jspx和Java Logger)

    利用这个可以突破st2下   强制jsp跳转login.jsp 利用jspx解决jsp后缀被限制拿shell - Hack Blog | 黑客博客http://www.hackblog.cn/post ...

  5. TCO'10 Wildcard Round 1000pt

    题目大意: 给定一个N*M的棋盘,棋子可以攻击其左右距离不超过K的棋子.问有多少种放法使得棋盘上的棋子不能互相攻击. N,M,K都在1到1000000000的范围内,结果对100003取模. 官方题解 ...

  6. Nginx:管理HTTP模块的配置项

    参考资料<深入理解Nginx> 一个nginx.conf的例子 http { mytest_num ; server { server_name A; listen ; mytest_nu ...

  7. 远程链接mysql数据库

    mysql -P3306 -uroot -proot 显示最大连接数 show variables like '%max_connections%'; 设置最大链接数 ;//默认100--只对当前进程 ...

  8. 通用对话弹窗CommonDialog

    代码地址如下:http://www.demodashi.com/demo/12592.html 通用对话弹窗CommonDialog Version 1.0 Created by chenchangj ...

  9. MQTT--topic

    1.topic  定阅与发布必须要有主题,只有当定阅了某个主题后,才能收到相应主题的payload,才能进行通信. 2. 主题层级分隔符—“/”  主题层级分隔符使得主题名结构化.如果存在分隔符,它将 ...

  10. php函数总结(闭包函数,匿名函数)

    php函数总结 1.普通函数 2.变量函数 function myfun($a) { echo $a; } $b = "myfun"; $b("test"); ...