迭代器模式
来源:互联网 发布:金正恩的出路 知乎 编辑:程序博客网 时间:2024/05/16 09:55
迭代器模式: 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示
使用场景:
当需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,你就应该考虑用迭代器模式。
优点:
迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可以让外部代码透明的访问及和内部的数据。
UML图:
代码实现:
package com.liran.main.DesignPattern.迭代器模式;import java.util.ArrayList;import java.util.List;/** * 迭代器模式 * Created by LiRan on 2016-03-01. */public class Iterator_pattern { public static void main(String[] args) { ConcreteAggregate aggregate=new ConcreteAggregate(); aggregate.set(0,"哈哈0"); aggregate.set(1,"哈哈1"); aggregate.set(2,"哈哈2"); aggregate.set(3,"哈哈3"); aggregate.set(4,"哈哈4"); aggregate.set(5,"哈哈5"); Iterator i=new ConcreteIterator(aggregate); Object item=i.First(); while (!i.IsDone()){ System.out.println(i.CurrentItem()+"请买票"); i.Next(); } }}/** * Iterator迭代器抽象类 */abstract class Iterator { public abstract Object First(); public abstract Object Next(); public abstract boolean IsDone(); public abstract Object CurrentItem();}/** * Aggregate抽象聚集类 */abstract class Aggregate { public abstract Iterator CreateIterator();}/** * ConcreteIterator具体迭代器类,集成Iterator */class ConcreteIterator extends Iterator { private ConcreteAggregate aggregate; private int current = 0; public ConcreteIterator(ConcreteAggregate aggregate) { this.aggregate = aggregate; } @Override public Object First() { return aggregate.get(0); } @Override public Object Next() { Object rect = null; current++; if (current < aggregate.count()) { rect = aggregate.get(current); } return rect; } @Override public boolean IsDone() { return current >= aggregate.count() ? true : false; } @Override public Object CurrentItem() { return aggregate.get(current); }}/** * 具体聚集类 */class ConcreteAggregate extends Aggregate { private List<Object> items = new ArrayList<>(); @Override public Iterator CreateIterator() { return new ConcreteIterator(this); } public int count() { return items.size(); } public Object get(int idex) { return items.get(idex); } public void set(int idex, Object o) { items.add(idex,o); }}
源码下载
Github
0 0
- 行为模式-迭代器模式
- 设计模式-迭代器模式
- 设计模式 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 【设计模式】迭代器模式
- 设计模式-迭代器模式
- 设计模式- 迭代器模式
- 设计模式 - 迭代器模式
- 设计模式:迭代器模式
- 行为模式-迭代器模式
- 设计模式 - 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 设计模式---迭代器模式
- 设计模式---迭代器模式
- 【设计模式】迭代器模式
- 设计模式 迭代器模式
- OpenCV:使用VideoCapture类进行视频读取和显示-Mat
- Pocket Cube
- struts2上传图片功能实现(单个图片)
- tasklet和软中断
- Function Run Fun(北大2015上机考试)
- 迭代器模式
- Eclipse 使用 maven 构建demo
- 仿易迅登录界面
- JLTrackLabelView
- poj 3254Corn Fields(状态压缩dp)
- OpenCL函数-1
- [c++]继承的经典例子
- 不同的2个程序彼此调用
- 用Qt实现一个桌面弹幕程序(七)-- -- 桌面客户端实现③