- 浏览: 216941 次
- 性别:
- 来自: 北京
文章分类
我个人常叫它游标模式,该模式的主要目的就是,顺序访问集合中的各个对象,而又不暴露该对象的内部表示。
使用场景:针对一个集合或是封装了集合的对象,对外界需要提供一个访问该集合或是该集合封装对象的保存的元素时,同时又不希望暴露该集合的内部结构。并且希望支撑根据不同的需求对集合元素进行不同的遍历。
主要的思想就是将集合与集合的遍历操作进行分离。即集合元素负责添加对象和删除对象等等。而遍历操作交给另一个对象。因此很容易想像到使用了组合,即将集合注入到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 11534在实际项目中,简单工厂模式是我们使用的最多的设计模式之一,简单 ... -
AbstractList中Iterator模式的妙用
2012-01-13 11:51 980AbstractList中为了实现顺序访问AbstractLi ... -
适合使用命令模式的情景
2012-01-13 11:31 921情景1.当借个类都拥有 ... -
使用工厂设计模式的场景
2012-01-12 15:43 2796创建类对象虽然可以使用new(底层也是通过反射创建对象的),但 ... -
JDK中使用的设计模式
2012-01-13 10:04 14451.抽象工厂模式 实 ... -
JDK中使用的设计模式代码实例
2012-01-05 17:38 0http://stackoverflow.com/questi ... -
享元模式
2011-12-23 10:22 1042通常情况下,我们会需 ... -
策略模式
2011-12-22 17:07 893所谓策略模式就是定义了多种算法,而让不同算法之间的切换不会影响 ... -
合成设计模式
2011-12-22 16:28 993如果要将对象组织到树中,使用树来表示对象之间的关系,请考虑使用 ... -
责任链模式
2011-12-20 18:35 845此文转正于http://wenku.baidu.com/vie ... -
桥梁设计模式
2011-12-19 18:19 845如果有很多对象要处理,而又有很多操作要做。这时可以考虑使用桥梁 ... -
多线程设计模式(Thread-Specific storage)
2011-12-12 15:29 5859引用自http://www.riabook.cn/doc/de ... -
代理模式
2011-11-30 15:26 940代理模式实际上是对对象的一种代理,以控制对象的访问。 有些情况 ... -
观察者模式
2011-11-16 14:48 1426声明转载的,简单易懂,呵呵 观察者模式的构造 l 抽 ... -
命令模式
2011-11-16 14:11 1258今天想学学命令模式,看见了一个文章讲的就是命令模式,感觉实例比 ... -
建造模式
2011-11-14 12:03 928建造模式是将负责对象 ... -
设计模式之适配器模式
2011-11-09 18:24 975适配器模式:主要是为了解决,老的对象在新的环境中不兼容的现象。 ... -
设计模式之模版方法
2011-11-09 16:31 825模版方法是一种非常简单的设计模式:简单的理解就是将关键的业务方 ...
相关推荐
### Java源码分析:深入探讨Iterator模式 #### 一、引言 在Java编程语言中,集合框架(`java.util`包)提供了多种容器类来存储对象,如`List`、`Set`和`Map`等。为了遍历这些容器中的元素,Java引入了迭代器模式...
所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式。本文以java中的容器为例,模拟Iterator的原理。 参考:马士兵 Java设计模式 Iterator 1.首先定义一个容器Collection接口. 2.定义一个Iterator...
Iterator模式是一种设计模式,主要用于遍历容器(如集合、数组)中的元素,提供了一种统一的访问方式,而无需暴露容器的内部结构。在Java中,`java.util.Iterator`接口就是这种模式的一个典型应用。在给定的文档中,...
【Iterator模式】是一种设计模式,它提供了一种顺序访问聚合对象元素的方式,而又不暴露其底层表示。在Java中,Iterator接口是实现此模式的主要工具,它允许我们遍历任何集合,如ArrayList、LinkedList等,而无需...
Iterator模式是一种设计模式,它提供了一种顺序访问聚合对象的元素而不暴露其底层表示的方法。在Java中,Iterator模式常用于遍历集合(如ArrayList、LinkedList等)和Map,使得开发者可以方便地对集合进行操作,而...
Iterator模式是一种设计模式,它允许程序访问集合对象的元素而不暴露其底层表示。在这个场景中,我们关注的是如何使用Iterator模式将对象转换为可读性强的字符串,这在日志记录、调试或输出对象信息时非常有用。我们...
大体思想:分页的核心思想采用 Iterator模式,每次从数据库中取定量的数据块 其中block和pageCount是两个不同的概念,block是块,规定了从数据库中获取的数量 pageCount为表现层每页显示的数量 另外参数中还包含缓存...
在Java编程语言中,Iterator模式是一种设计模式,用于在各种数据结构(如集合)中进行迭代操作,使得用户可以顺序地访问集合中的元素,而无需了解底层数据结构的细节。这个模式有效地解耦了集合对象和遍历行为,提供...
迭代器模式是软件设计模式中的一种行为模式,它在C++中的应用十分广泛。这个模式的主要目的是提供一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。通过使用迭代器模式,用户可以遍历任何聚合对象,而无需...
Iterator模式是一种行为设计模式,它的主要作用是在不暴露容器内部结构的情况下,允许外部代码逐个访问容器中的元素。在Java中,Iterator模式被广泛应用于集合框架,如ArrayList、LinkedList等,使得用户能够方便地...
F_Java源码分析:深入探讨Iterator模式
JavaScript中的Iterator模式是一种被广泛使用的设计模式,其目的是为了能够按顺序逐个访问容器中的元素,而不暴露容器的内部实现。此模式常用于数组和类数组对象,以便于在JavaScript这种没有显式接口定义的语言中,...
### C++中的Iterator模式详解 #### 什么是Iterator模式? 在软件工程中,设计模式是一种用于解决特定问题的通用可重用解决方案。Iterator模式是其中的一种,其主要目标是在不暴露集合内部结构的情况下,为遍历集合...
java.util包中包含了一系列重要的集合类。本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕。
在Java、C#等面向对象语言中,Iterator模式扮演着非常重要的角色。 迭代器模式通常由以下组件构成: 1. **聚合对象**(Aggregate):它定义了对一组对象的接口,而这些对象可以通过迭代器进行访问。在Java中,这...
### 三、Iterator模式的优势 使用`Iterator`模式遍历集合具有以下优势: 1. **解耦访问逻辑**:客户端代码无需了解集合的具体实现,这使得修改集合实现时不会影响到客户端代码。 2. **简化客户端代码**:通过`...
C#面向对象设计模式 (行为型模式) Iterator 迭代器模式 视频讲座下载
首先,迭代模式的核心组件包括迭代器(Iterator)和聚合对象(Aggregate)。在给定的例子中,`Teacher`接口代表聚合对象,`ConcreteTeacher`是它的具体实现,存储了学生的出勤情况。`Iterator`接口定义了迭代操作,...