【设计模式 - 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) : 提供一 ...
随机推荐
- [lua]原来这才是表驱动的正确表达方式
曾经写了个很煞笔的脚本模拟switch..case语法形式.[lua]尝试一种Case语法糖 而今实际项目应用中突发,原来这才是正确的表驱动方式表达.如下所贴: function event_do( ...
- [学习笔记]设计模式之Facade
写在前面 为方便读者,本文已添加至索引: 设计模式 学习笔记索引 Facade(外观)模式定义了一个高层接口,它能为子系统中的一组接口提供一个一致的界面,从而使得这一子系统更加容易使用.欢迎回到时の魔 ...
- React 学习资源分享 菜鸟刚学5天 博客写的不多 不懂写博客的套路
http://www.ruanyifeng.com/blog/2015/03/react.html 首先个人强烈推荐 阮一峰的React基础 细细过一遍,看得出大师的用心良苦 然后就开始看书般的过ht ...
- phpmyadmin数据导入最大限制的解决方法
mysql导入文件最大限制更改解决方法:phpmyadmin库导入出错:You probably tried to upload too large file. Please refer to doc ...
- Python环境搭建中解决C编译的问题
下载必要文件 Python Microsoft Visual C++ Compiler for Python 2.7 setuptools 安装Python 安装VCForPython27 在命令行下 ...
- POJ 3041 Asteroids 最小点覆盖 == 二分图的最大匹配
Description Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape o ...
- sqlserver 学习
http://www.cnblogs.com/CareySon/category/411344.html SQL Server查找的最小单位实际上是页.也就是说即使你只查找一行很小的数据,SQL Se ...
- 用PYTHON输入输出字符串
这段好懂的,可以互动. import sys import re class BadEmployeeFormat(Exception): """Badly formatt ...
- 一个简单的C#获取Session、设置Session类文件
一个简单的C#获取Session.设置Session类文件,本类主要实现大家最常用的两个功能: 1.GetSession(string name)根据session名获取session对象: 2.Se ...
- Android开源项目发现--- 工具类数据库ORM篇(持续更新)
orm的db工具类,简化建表.查询.更新.插入.事务.索引的操作 1. greenDAO Android Sqlite orm的db工具类 项目地址:https://github.com/greenr ...