1.设计模式-------Iterator
本文主要是参考《图解设计模式》写的读书笔记;
开发中我用到遍历集合时候,无非我常用的就是简单的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的更多相关文章
- [设计模式] Iterator - 迭代器模式:由一份奥利奥早餐联想到的设计模式
Iterator - 迭代器模式 目录 前言 回顾 UML 类图 代码分析 抽象的 UML 类图 思考 前言 这是一包奥利奥(数组),里面藏了很多块奥利奥饼干(数组中的元素),我将它们放在一个碟子上慢 ...
- [C# 设计模式] Iterator - 迭代器模式:我与一份奥利奥早餐的故事
Iterator - 迭代器模式 目录 前言 回顾 UML 类图 代码分析 抽象的 UML 类图 思考 前言 这是一包奥利奥(数组),里面藏了很多块奥利奥饼干(数组中的元素),我将它们放在一个碟子上慢 ...
- 使用C# (.NET Core) 实现迭代器设计模式 (Iterator Pattern)
本文的概念来自深入浅出设计模式一书 项目需求 有两个饭店合并了, 它们各自有自己的菜单. 饭店合并之后要保留这两份菜单. 这两个菜单是这样的: 菜单项MenuItem的代码是这样的: 最初我们是这样设 ...
- 设计模式-Iterator
本文参(chao)考(xi)<图解设计模式> 结城浩 (作者) 杨文轩 (译者) 1.Iterator 模式 迭代器作用于集合,是用来遍历集合元素的对象. 迭代器模式提供一种方法顺序访问一 ...
- java设计模式-Iterator
Iterator模式 主要是用在容器的遍历上,其他的地方都不怎么用:理解一下,会用了就可以了: 1.背景 请动手自己写一个可以动态添加对象的容器: 代码: ArrayList.java(是自己实现 ...
- [C++设计模式] iterator 迭代器模式
迭代器模式定义:提供一种方法顺序訪问一个聚合对象中各个元素,而又不须要暴露该对象. 迭代器分内部迭代器和外部迭代器.内部迭代器与对象耦合紧密,不推荐使用. 外部迭代器与聚合容器的内部对象松耦合,推荐使 ...
- C++设计模式-Iterator迭代器模式
ref: http://www.cnblogs.com/onlycxue/archive/2013/12/25/3490738.html
- Java设计模式之Iterator模式
分类: [java]2013-07-15 10:58 917人阅读 评论(0) 收藏 举报 所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式.本文以java中的容器为例 ...
- Java 设计模式实现 不错的引用
这段时间有兴趣重新温习一下设计模式在Java中的实现,碰巧看到一个不错的设计模式总结,这里引用一下作为参考. 创建型模式: JAVA设计模式-Singleton JAVA设计模式-Factory JA ...
随机推荐
- Python 把u'\xca\xd3\xc6\xb5\xd7\xa5\xc8\xa1' 输出正常中文
今天碰见从数据库读取出来数据是u'\xca\xd3\xc6\xb5\xd7\xa5\xc8\xa1',输出显示乱码,经常查询处理如下: 两种方式: 1. s = u'\xca\xd3\xc6\xb5\ ...
- ElasticSearch5.5.2:Windows下ElasticSearch安装配置
环境 1.Windows10企业版X64 2.JDK-1.8 3.ElasticSearch-5.5.2 4.elasticsearch-head插件 5.node-v6.11.2-x64.msi 1 ...
- C++ 模板应用 实现一个Queue 队列
#include<iostream> using namespace std; template <typename T> class Queue { public: Queu ...
- 矩阵十题【五】 VOJ1049 HDU 2371 Decode the Strings
题目链接:https://vijos.org/p/1049 题目大意:顺次给出m个置换,重复使用这m个置换对初始序列进行操作.问k次置换后的序列.m<=10, k<2^31. 首先将这m个 ...
- redhat6.4 install 163 source
1) 到http://mirrors.163.com的 centos帮助文档 中下载CentOS6-Base-163.repo文件,存放到/etc/yum.repo.d中 wget http://mi ...
- 倍福TwinCAT(贝福Beckhoff)基础教程5.1 TwinCAT-1 获取和设置系统时间
使用功能块NT_GetTime,NETID填写两个单引号表示本机,START就是一个触发信号,一般的功能块都需要一个上升沿触发执行,最后的输出类型都是让系统自己决定,然后统一把这些变量放到全局变量中( ...
- Easy way to change collation of all database objects in SQL Server
This info is from: http://www.codeproject.com/Articles/302405/The-Easy-way-of-changing-Collation-of- ...
- Servlet的API(一)
Servlet的API有很多,这里只谈谈两个Servlet对象:ServletConfig对象和ServletContext对象. 1. ServletConfig对象 在Servlet的配置文件中, ...
- 非常easy学习的JQuery库 : (二) 选择器
作用 选择器同意您对元素组或单个元素进行操作. 在前面的章节中,我们介绍了一些有关怎样选取 HTML 元素的实例. 关键点是学习 jQuery 选择器是怎样准确地选取您希望应用效果的元素. jQuer ...
- Atitit.软件硕士 博士课程 一览表 attilax 总结
Atitit.软件硕士 博士课程 一览表 attilax 总结 1. Attilax聚焦的领域1 2. 研究生硕士博士课程汇总表1 3. 博士课程3 4. Attilax额外的4 5. 参考4 1. ...