设计模式学习笔记(17)——迭代器模式
2015-05-21 16:55
363 查看
迭代器模式其实是一个过时的产物,Java与C#均已实现该模式,此处更多的是理解迭代器的原理!
一、模式定义
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
二、模式结构
三、模式实现
Iterator : 定义访问元素的接口。
ConcreteIterator : 实现 Iterator 接口。记录当前访问的元素在集合中的位置信息。
Aggregate : 定义创建 Iterator 对象的接口。
ConcreteAggregate : 实现 Iterator 接口,返回一个合适的 ConcreteIterator 实例。
测试代码
运行结果
第一个人是:张三
所有人的名单是:
张三
李四
王五
赵六
[b]四、使用场景[/b]
1、访问一个聚合对象的内容而无须暴露它的内部表示。
2、需要为聚合对象提供多种遍历方式。
3、为遍历不同的聚合结构提供一个统一的接口。
一、模式定义
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
二、模式结构
三、模式实现
Iterator : 定义访问元素的接口。
interface Iterator { public Object first(); public Object next(); public boolean isDone(); public Object currentItem(); }
ConcreteIterator : 实现 Iterator 接口。记录当前访问的元素在集合中的位置信息。
class ConcreteIterator implements Iterator { private int current = 0; private ConcreteAggregate aggregate; public ConcreteIterator(ConcreteAggregate aggregate) { this.aggregate = aggregate; } @Override public Object first() { return aggregate.get(0); } @Override public Object next() { current++; if (current < aggregate.size()) { return aggregate.get(current); } return null; } @Override public boolean isDone() { return (current >= aggregate.size()) ? true : false; } @Override public Object currentItem() { return aggregate.get(current); } }
Aggregate : 定义创建 Iterator 对象的接口。
interface Aggregate { public Iterator CreateIterator(); }
ConcreteAggregate : 实现 Iterator 接口,返回一个合适的 ConcreteIterator 实例。
class ConcreteAggregate implements Aggregate { private List<Object> items = new ArrayList<Object>(); @Override public Iterator CreateIterator() { return new ConcreteIterator(this); } public int size() { return items.size(); } public Object get(int index) { return items.get(index); } public void set(int index, Object element) { items.set(index, element); } public void add(Object element) { items.add(element); } }
测试代码
public class IteratorPattern { public static void main(String[] args) { ConcreteAggregate aggregate = new ConcreteAggregate(); aggregate.add("张三"); aggregate.add("李四"); aggregate.add("王五"); aggregate.add("赵六"); Iterator iter = new ConcreteIterator(aggregate); Object item = iter.first(); System.out.println("第一个人是:" + item); System.out.println("所有人的名单是:"); while (!iter.isDone()) { System.out.println(iter.currentItem()); iter.next(); } } }
运行结果
第一个人是:张三
所有人的名单是:
张三
李四
王五
赵六
[b]四、使用场景[/b]
1、访问一个聚合对象的内容而无须暴露它的内部表示。
2、需要为聚合对象提供多种遍历方式。
3、为遍历不同的聚合结构提供一个统一的接口。
相关文章推荐
- java学习笔记-设计模式17(迭代器模式)
- 设计模式学习笔记之迭代器模式
- 自学与复习设计模式笔记(17)迭代器模式
- 设计模式:迭代器模式(学习笔记)
- 【设计模式】学习笔记17:代理模式之保护代理与Java反射
- 【学习笔记javascript设计模式与开发实践(迭代器模式)----7】
- 设计模式学习笔记——迭代器模式
- 设计模式C++学习笔记之十四(Iterator迭代器模式)
- HeadFirst 设计模式学习笔记9--迭代器模式
- 步步为营 .NET 设计模式学习笔记 十一、Iterator(迭代器模式)
- 【设计模式学习笔记十七】【行为模式】【迭代器模式(Interpreter)】
- 设计模式学习笔记-迭代器模式
- js设计模式之迭代器模式学习笔记--封装简单的数组迭代器
- 设计模式学习笔记--迭代器模式
- java 设计模式 学习笔记(17) 桥接模式
- 设计模式C++学习笔记之十四(Iterator迭代器模式)
- 【HeadFirst 设计模式学习笔记】17 中介者(Mediator)模式拾零
- [学习笔记]设计模式[8]-{迭代器模式}
- 《Head First 设计模式》学习笔记:迭代器模式与组合模式
- 【学习笔记】设计模式-迭代器模式