设计模式(十四)迭代器模式(Iterator)-行为型
来源:互联网 发布:金山数据恢复免费 编辑:程序博客网 时间:2024/04/28 18:31
大清晨,发一篇博文提提神吧。
迭代器模式(Iterator)
在软件开发过程中,经常需要将某一类的对象放在一个集合里,或者放在容器里,这个时候通常需要对集合或容器里的对象进行访问,很明显,对容器或集合里的对象访问必然涉及遍历,这就是迭代器模式。
迭代模式实现原理图
迭代器模式实现原理图
实现
迭代器角色负责定义访问和遍历元素的接口,它的示例代码如下:
Iterator.java
public interface Iterator { void Next(); void First(); void Currentitem(); void IsDone();}
具体迭代器角色实现迭代器接口,并要记录中的当前位置,示意代码如下:
ConcreteIterator.java
package com.devin.iterator; /** * @author 作者:ldw E-mail: csu.ldw@csu.edu.cn * @version 创建时间:2015年4月26日 下午12:57:20 * 类说明 */public class ConcreteIterator implements Iterator{ private ConcreteAggregate concreteAggregate; @Override public void Next() { } @Override public void First() { } @Override public void Currentitem() { } @Override public void IsDone() { }}
容器角色负责提供创建具体迭代器角色的接口,示意代码如下:
Aggregate.java
public interface Aggregate { Iterator createIterator();}
具体容器角色实现创建具体迭代器角色的接口,这个具体迭代器角色和该容器的结构相关,它的示意代码如下:
ConcreteAggregate.java
public class ConcreteAggregate implements Aggregate{ @Override public Iterator createIterator() { return new ConcreteIterator(); }}
具体实例
迭代器模式在公交售票系统的使用
对于公交售票系统来说,不管是谁上车,都要刷卡的,每张卡里有多少金额,刷卡的里程都是要通过系统进行判断的。此时使用迭代器模式就比较好,首先定义公交车类:
公交车类Bus.java
package com.devin.iterator.test; /** * @author 作者:ldw E-mail: csu.ldw@csu.edu.cn * @version 创建时间:2015年4月26日 下午1:14:48 * 类说明 */public class Bus { private String name; public Bus(String name){ this.name = name; } public String getName(){ return name; }}
定义迭代器类Iterator.java
package com.devin.iterator.test; /** * @author 作者:ldw E-mail: csu.ldw@csu.edu.cn * @version 创建时间:2015年4月26日 下午1:15:38 * 类说明 */public interface Iterator { public boolean hasNext(); public Object next();}
定义迭代器的公交车类BusIterator.java
package com.devin.iterator.test; /** * @author 作者:ldw E-mail: csu.ldw@csu.edu.cn * @version 创建时间:2015年4月26日 下午1:16:29 * 类说明 */public class BusIterator implements Iterator { private BusList list; private int count; public BusIterator(BusList list) { this.list = list; this.count = list.count(); } @Override public boolean hasNext() { boolean flag = true; if(count==0){ flag = false; }else { flag = true; } return flag; } @Override public Object next() { Bus bus; bus = list.getList().get(--count); return bus; }}
定义公交的集合类BusList.java
package com.devin.iterator.test; import java.util.ArrayList;import java.util.List;/** * @author 作者:ldw E-mail: csu.ldw@csu.edu.cn * @version 创建时间:2015年4月26日 下午1:16:55 * 类说明 */public class BusList { private List<Bus> list = new ArrayList<Bus>(); private int count; public void add(Bus bus){ list.add(bus); count++ ; } public void remove(Bus bus) { list.remove(bus); count--; } public int count(){ return count; } public List<Bus> getList(){ return list; } public Iterator createIterator(){ return new BusIterator(this); }}
Client.java
package com.devin.iterator.test;/** * @author 作者:ldw E-mail: csu.ldw@csu.edu.cn * @version 创建时间:2015年4月26日 下午1:23:13 类说明 */public class Client { public static void main(String[] args) { Bus bus1 = new Bus("张三那"); Bus bus2 = new Bus("lisi"); BusList busList = new BusList(); busList.add(bus1); busList.add(bus2); Iterator it = busList.createIterator(); while(it.hasNext()){ System.out.println(((Bus)it.next()).getName()); } }}
1 0
- 设计模式(十四)迭代器模式(Iterator)-行为型
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)
- 设计模式之 迭代器(Iterator)----对象行为型模式
- 设计模式--迭代器模式Iterator(行为型)
- 设计模式-行为型- 迭代器模式(Iterator)
- 行为型模式-----迭代器模式(Iterator)
- [设计模式-行为型]迭代器模式(Iterator)
- Iterator迭代器设计模式学习(对象行为型)
- 设计模式C++之十四(Iterator迭代器模式)
- 行为型:设计模式之中介者模式(十四)
- 行为模式 - 迭代器(ITERATOR)
- 行为模式:Iterator(迭代器)
- C#面向对象设计模式纵横谈 学习笔记18 Iterator迭代器模式(行为型模式)
- 十六、迭代器模式Iterator(行为型)
- JAVA设计模式(21):行为型-迭代器模式(Iterator)
- IOS7状态栏StatusBar官方标准适配方法
- 锅炉性能计算软件的需求
- SubClasing用法--子类重写父类方法,父类直接调用实现方式
- C 、C++区别和细节
- public protect private作用域的大小
- 设计模式(十四)迭代器模式(Iterator)-行为型
- SpringFramework下载地址
- jquery中:input和input的区别分析
- Gradle 1.12用户指南翻译——第三十一章. FindBugs 插件
- 30 个 Python 语言的特点技巧
- 剑指offer 面试题36—数组中的逆序对
- cocos2d-js v3.6 关于处理图片锯齿、不清楚的处理方法
- ios nsdata转nsstring 乱码 和 从nsdata中读取指定的二进制
- 使用jQuery.form插件实现表单异步提交+上传文件