【设计模式 - 16】之迭代器模式(Iterator)
1、模式简介
迭代器模式是JAVA中非常常用的模式,List、Map、Set等常见集合中都封装了迭代器Iterator。
迭代器模式的介绍:
迭代器模式用于顺序访问集合对象中的元素,而不需要知道集合对象的底层表示,即可以将在元素之间游走的责任交给迭代器,而不是集合对象本身。
迭代器模式的优点:
- 它支持以不同的方式遍历一个聚合对象;
- 迭代器简化了集合类;
- 在同一个集合上可以有多个遍历(如顺序遍历、倒序遍历等);
- 在迭代器模式中,增加新的集合类和迭代器类都很方便,无须修改原有代码。
迭代器模式的缺点:
由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
迭代器模式的适用场景:
- 当想要访问一个集合对象的内容而不想暴露它的内部表示时;
- 当需要为集合对象提供多种遍历方式时;
- 当想为遍历不同的集合结构提供一个统一的接口时。
2、案例
在这个案例中,我们在AnimalCollection中封装一个List,在List中存储Animal的信息,通过AnimalIterator遍历AnimalCollection中的List中的信息并输出。具体代码如下:
迭代器接口Iterator中的代码:
public interface Iterator {
// 是否还有下一个元素
boolean hasNext();
// 获取下一个元素
Object next();
}
Animal集合类AnimalCollection中的代码:
public class AnimalCollection {
private List<String> animals;
public AnimalCollection() {
this.animals = new ArrayList<>();
}
public void addAnimal(String animal) {
animals.add(animal);
}
public Iterator iterator() {
return new AnimalIterator(animals);
}
}
Animal集合的迭代器AnimalIterator中的代码:
public class AnimalIterator implements Iterator {
private List<String> animals;
private int currentPosition;
public AnimalIterator(List<String> animals) {
this.animals = animals;
this.currentPosition = -1;
}
@Override
public boolean hasNext() {
return currentPosition < animals.size() - 1;
}
@Override
public Object next() {
return animals.get(++currentPosition);
}
}
测试类Test中的代码:
public class Test {
public static void main(String[] args) {
AnimalCollection animalCollection = new AnimalCollection();
animalCollection.addAnimal("小猫");
animalCollection.addAnimal("小狗");
animalCollection.addAnimal("小驴");
animalCollection.addAnimal("兔兔");
Iterator iterator = animalCollection.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
运行结果如下图所示:
最后贴出迭代器模式在GitHub中的代码地址:【GitHub - Iterator】。
【设计模式 - 16】之迭代器模式(Iterator)的更多相关文章
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型) 1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的 ...
- 设计模式系列之迭代器模式(Iterator Pattern)——遍历聚合对象中的元素
模式概述 模式定义 模式结构图 模式伪代码 模式改进 模式应用 模式在JDK中的应用 模式在开源项目中的应用 模式总结 说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修 ...
- 《JAVA设计模式》之迭代器模式(Iterator)
在阎宏博士的<JAVA与模式>一书中开头是这样描述迭代子(Iterator)模式的: 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不 ...
- 设计模式(十):从电影院中认识"迭代器模式"(Iterator Pattern)
上篇博客我们从醋溜土豆丝与清炒苦瓜中认识了“模板方法模式”,那么在今天这篇博客中我们要从电影院中来认识"迭代器模式"(Iterator Pattern).“迭代器模式”顾名思义就是 ...
- 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)
原文:乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) 作者:weba ...
- 迭代器模式 Iterator 行为型 设计模式(二十)
迭代器模式(Iterator) 走遍天下,世界那么大,我想去看看 在计算机中,Iterator意为迭代器,迭代有重复的含义,在程序中,更有“遍历”的含义 如果给定一个数组,我们可以通过for循 ...
- Java 设计模式系列(十五)迭代器模式(Iterator)
Java 设计模式系列(十五)迭代器模式(Iterator) 迭代器模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(interna ...
- 设计模式学习--迭代器模式(Iterator Pattern)和组合模式(Composite Pattern)
设计模式学习--迭代器模式(Iterator Pattern) 概述 ——————————————————————————————————————————————————— 迭代器模式提供一种方法顺序 ...
- 二十四种设计模式:迭代器模式(Iterator Pattern)
迭代器模式(Iterator Pattern) 介绍提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示. 示例有一个Message实体类,某聚合对象内的各个元素均为该实体对象,现 ...
- 设计模式 - 迭代器模式(iterator pattern) 具体解释
迭代器模式(iterator pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 迭代器模式(iterator pattern) : 提供一 ...
随机推荐
- python模块学习 logging
1.简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info messa ...
- 疯狂的表单-html5新增表单元素和属性
疯狂的表单 2015/11/27 16:44:07 从三方面来介绍html5表单的新特性 表单结构更灵活 要提交数据的控件可以布局在form标签之外,看下面的代码,表单元素可以写到form元素之外,只 ...
- phpexcel的写出操作(生成excel表)
/* thinkphp3.2 ThinkPHP/Library/Org/Util/ 放置位置 http://files.cnblogs.com/files/youligai/phpexcel.zip ...
- UI图标不用愁:矢量字体图标Font-Awesome
Font-Awesome,这个项目主要是css3的一个应用,准确的说是一段css,这里的把很多图标的东西做到了font文件里面,然后通过引用外部font文件的方式,来展现图标. Font Awesom ...
- PHPCMS栏目调用2
{php $j=1;} {loop subcat(50) $v} {php if($v['type']!=0) continue;} ...
- Memento:客户端瘦身
说是客户端瘦身,其实备忘录模式的本质让调用客户端职责减轻,将客户端的对于实现比如数据恢复之类细节的内容封装在操作类之中.其实面向对象的一重要方面就是划分清楚职责,这样可以减少改到造成的影响,便于扩展. ...
- javascript 与 java
- Quartz1.8.5例子(六)
/* * Copyright 2005 - 2009 Terracotta, Inc. * * Licensed under the Apache License, Version 2.0 (the ...
- 有关collection中的一些数据结构
Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素 ...
- ARCH Linux pacman 包管理器出错总结
最在使用ARCH的时候使用命令: sudo pacman -S Ruby 终端报错: error: could not open file /var/lib/pacman/sync/apricity- ...