- 浏览: 211523 次
- 性别:
- 来自: 北京
文章分类
我个人常叫它游标模式,该模式的主要目的就是,顺序访问集合中的各个对象,而又不暴露该对象的内部表示。
使用场景:针对一个集合或是封装了集合的对象,对外界需要提供一个访问该集合或是该集合封装对象的保存的元素时,同时又不希望暴露该集合的内部结构。并且希望支撑根据不同的需求对集合元素进行不同的遍历。
主要的思想就是将集合与集合的遍历操作进行分离。即集合元素负责添加对象和删除对象等等。而遍历操作交给另一个对象。因此很容易想像到使用了组合,即将集合注入到Iterator的实现类当中。
实例:
public class BookShelf implements Aggregate {
private Book[] books;
private int last = 0;
public BookShelf(int maxsize) {
this.books = new Book[maxsize]; }
public Book getBookAt(int index) {
return books[index]; }
public void appendBook(Book book) {
this.books[last] = book; last++;
}
public int getLength() { return last; }
public Iterator iterator() { return new BookShelfIterator(this); }
}
BookShelf是一个封装了集合的对象,当然如果希望迭代器可以实现动态指定,可以再声明一个迭代器的成员变量。然后注入一个自己想要的迭代器即可。
return new BookShelfIterator(this);将集合对象注入给迭代器。并返回迭代器的实例。
public interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
}
public class BookShelfIterator implements Iterator {
private BookShelf bookShelf;
private int index;
public BookShelfIterator(BookShelf bookShelf) {
this.bookShelf = bookShelf;
this.index = 0;}
public boolean hasNext() {
if (index < bookShelf.getLength()) { return true;}
else { return false; } }
public Object next() {
Book book = bookShelf.getBookAt(index);
index++;
return book;
} }
使用场景:针对一个集合或是封装了集合的对象,对外界需要提供一个访问该集合或是该集合封装对象的保存的元素时,同时又不希望暴露该集合的内部结构。并且希望支撑根据不同的需求对集合元素进行不同的遍历。
主要的思想就是将集合与集合的遍历操作进行分离。即集合元素负责添加对象和删除对象等等。而遍历操作交给另一个对象。因此很容易想像到使用了组合,即将集合注入到Iterator的实现类当中。
实例:
public class BookShelf implements Aggregate {
private Book[] books;
private int last = 0;
public BookShelf(int maxsize) {
this.books = new Book[maxsize]; }
public Book getBookAt(int index) {
return books[index]; }
public void appendBook(Book book) {
this.books[last] = book; last++;
}
public int getLength() { return last; }
public Iterator iterator() { return new BookShelfIterator(this); }
}
BookShelf是一个封装了集合的对象,当然如果希望迭代器可以实现动态指定,可以再声明一个迭代器的成员变量。然后注入一个自己想要的迭代器即可。
return new BookShelfIterator(this);将集合对象注入给迭代器。并返回迭代器的实例。
public interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
}
public class BookShelfIterator implements Iterator {
private BookShelf bookShelf;
private int index;
public BookShelfIterator(BookShelf bookShelf) {
this.bookShelf = bookShelf;
this.index = 0;}
public boolean hasNext() {
if (index < bookShelf.getLength()) { return true;}
else { return false; } }
public Object next() {
Book book = bookShelf.getBookAt(index);
index++;
return book;
} }
发表评论
-
多种单例模式的分析
2012-03-28 18:06 0blog.csdn.net/derpvailzhangfan/ ... -
JDK中的设计模式
2012-03-14 22:56 01.Abstract Factory •java.util.C ... -
简单工厂模式使用心得(使用场景)
2012-02-23 18:24 11481在实际项目中,简单工厂模式是我们使用的最多的设计模式之一,简单 ... -
AbstractList中Iterator模式的妙用
2012-01-13 11:51 941AbstractList中为了实现顺序访问AbstractLi ... -
适合使用命令模式的情景
2012-01-13 11:31 884情景1.当借个类都拥有 ... -
使用工厂设计模式的场景
2012-01-12 15:43 2728创建类对象虽然可以使用new(底层也是通过反射创建对象的),但 ... -
JDK中使用的设计模式
2012-01-13 10:04 14141.抽象工厂模式 实 ... -
JDK中使用的设计模式代码实例
2012-01-05 17:38 0http://stackoverflow.com/questi ... -
享元模式
2011-12-23 10:22 1001通常情况下,我们会需 ... -
策略模式
2011-12-22 17:07 836所谓策略模式就是定义了多种算法,而让不同算法之间的切换不会影响 ... -
合成设计模式
2011-12-22 16:28 942如果要将对象组织到树中,使用树来表示对象之间的关系,请考虑使用 ... -
责任链模式
2011-12-20 18:35 800此文转正于http://wenku.baidu.com/vie ... -
桥梁设计模式
2011-12-19 18:19 802如果有很多对象要处理,而又有很多操作要做。这时可以考虑使用桥梁 ... -
多线程设计模式(Thread-Specific storage)
2011-12-12 15:29 5817引用自http://www.riabook.cn/doc/de ... -
代理模式
2011-11-30 15:26 903代理模式实际上是对对象的一种代理,以控制对象的访问。 有些情况 ... -
观察者模式
2011-11-16 14:48 1367声明转载的,简单易懂,呵呵 观察者模式的构造 l 抽 ... -
命令模式
2011-11-16 14:11 1220今天想学学命令模式,看见了一个文章讲的就是命令模式,感觉实例比 ... -
建造模式
2011-11-14 12:03 879建造模式是将负责对象 ... -
设计模式之适配器模式
2011-11-09 18:24 931适配器模式:主要是为了解决,老的对象在新的环境中不兼容的现象。 ... -
设计模式之模版方法
2011-11-09 16:31 781模版方法是一种非常简单的设计模式:简单的理解就是将关键的业务方 ...
相关推荐
Java源码分析:深入探讨Iterator模式
所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式。本文以java中的容器为例,模拟Iterator的原理。 参考:马士兵 Java设计模式 Iterator 1.首先定义一个容器Collection接口. 2.定义一个Iterator...
23种设计模式之二十二(行为模式)Iterator模式
大体思想:分页的核心思想采用 Iterator模式,每次从数据库中取定量的数据块 其中block和pageCount是两个不同的概念,block是块,规定了从数据库中获取的数量 pageCount为表现层每页显示的数量 另外参数中还包含缓存...
F_Java源码分析:深入探讨Iterator模式
2022年Java源码分析:深入探讨Iterator模式Java教程.docx
所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式。本文以java中的容器为例,模拟Iterator的原理。需要的朋友可以参考下
。。。
本文实例讲述了JavaScript实现Iterator模式的方法。分享给大家供大家参考。具体分析如下: 经常在网上看到有不少JS设计模式的示例。这里写一下JavaScript实现Iterator模式的方法,记录在此,仅作备忘: <!...
。。。
java.util包中包含了一系列重要的集合类。本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕。
主要介绍了Java设计模式之迭代模式(Iterator模式)介绍,本文用一个老师点名的现象描述了迭代模式的使用,需要的朋友可以参考下
。。。
。。。
设计模式精解-GoF 23 种设计模式解析附 C++实现源码 目 录 引 言 0.1 设计模式解析(总序) 0.2 设计模式解析后记 0.3 与作者联系 1 创建型模式 ...3.10 Iterator模式 3.11 Interpreter模式 4 说明
C#面向对象设计模式 (行为型模式) Iterator 迭代器模式 视频讲座下载
Design Pattern: Iterator 模式 Mediator 模式 Memento 模式 Observer 模式 State 模式 Strategy 模式 Template Method 模式 Visitor 模式 Guarded Suspension 模式 Producer Consumer 模式 ...