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

            开发中我用到遍历集合时候,无非我常用的就是简单的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. 要做国外的app,使用到的分享和统计SDK推荐

    国内的就不说了,多如牛毛,常用的是友盟,极光,shareSDK等等. 国外的统计有: Flurry(https://developer.yahoo.com) google analytics(http ...

  2. react-native 项目实战 -- 新闻客户端(2) -- 完善TabBar

    1.创建 drawable-xxhdpi 文件夹,保存 TabBar 的 icon图标 android  --  app  --  src  --  main  --  res  --  drawab ...

  3. hdu4930 Fighting the Landlords(模拟 多校6)

    题目链接:pid=4930">http://acm.hdu.edu.cn/showproblem.php? pid=4930 Fighting the Landlords Time L ...

  4. LBS 附近的人

    1 http://www.infoq.com/cn/articles/depth-study-of-Symfony2 2 http://lbsyun.baidu.com/

  5. Lambda Expression in C#

    1.Expression Expression<Func<double, double>> exp = a => Math.Sin(a); 委托类型Func<dou ...

  6. CentOS4.5下LVS方案

    环境描述:本文在配置LVS时使用三台linux,一台做Directorserver (192.168.0.25) ,两台做realserver(192.168.0.127 192.168.0.12,在 ...

  7. window 效率神器:Wox

    官方网站 http://www.getwox.com/ 下载后以管理员身份运行,右下角可以看到Wox的图标.点击setting可以进入主界面 如果看不懂可以将语言设置为中文 默认快捷键是Alt + s ...

  8. JavaFX打包到Android上

    让JavaFX执行到移动平台一直是社区努力完毕的事.  当然,眼下已经能够让JavaFX执行到Android和IOS平台了,以下我们来看看怎样打包自己的JavaFX项目到Android平台.  首先下 ...

  9. explicit 构造函数

    一.构造函数.默认构造函数.合成的默认构造函数 构造函数,是函数名与类名同样.没有返回类型的特殊的成员函数.能够有初始化列表. 默认构造函数,没有形參.或全部形參都有默认实參的构造函数. 假设没有显示 ...

  10. HTML_<a>

    1.在a标签中调用js函数最适当的方法推荐使用: (1) a href="javascript:void(0);" onclick="js_method()" ...