设计模式(16)------迭代器模式
来源:互联网 发布:男子遭遇网络诈骗 编辑:程序博客网 时间:2024/05/17 09:04
迭代器模式作用:
使用迭代器模式来提供对聚合对象的统一存取,即提供一个外部的迭代器来对聚合对象进行访问和遍历 ,
而又不需暴露该对象的内部结构。又叫做游标(Cursor)模式 。
应用场景:
(1)访问一个聚合对象的内容而无需暴露它的内部表示。
(2)为聚合对象提供多种遍历方式。
(3)为遍历不同的聚合结构提供一个统一的接口 (即, 支持多态迭代)。
参与对象:
(1) Iterator(抽象迭代器)
迭代器定义访问和遍历元素的接口。
(2)ConcreteIterator(具体迭代器)
具体迭代器实现迭代器Iterator接口。对该聚合遍历时跟踪当前位置。
(3)Aggregate(抽象聚合类)
聚合定义创建相应迭代器对象的接口。
(4)ConcreteAggregate(具体聚合类)
具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例。
eg:
Iterator
package com.lanhuigu.base.design.behavior.iterator;/** * Iterator: 迭代器定义访问和遍历元素的接口 */public interface Iterator {Object next();void first();void last();boolean hasNext();}
ConcreteIterator
package com.lanhuigu.base.design.behavior.iterator;/** * ConcreteIterator: 具体迭代器实现迭代器Iterator接口 */public class IteratorImpl implements Iterator {private List list;private int index;public IteratorImpl(List list) {// TODO Auto-generated constructor stubindex = 0;this.list = list;}@Overridepublic void first() {// TODO Auto-generated method stubindex = 0;}@Overridepublic void last() {// TODO Auto-generated method stubindex = list.getSize();}@Overridepublic Object next() {// TODO Auto-generated method stubObject obj = list.get(index);index++;return obj;}@Overridepublic boolean hasNext() {// TODO Auto-generated method stubreturn index < list.getSize();}}
Aggregate
package com.lanhuigu.base.design.behavior.iterator;/** * Aggregate: 聚合定义创建相应迭代器对象的接口 */public interface List {Iterator iterator();Object get(int index);int getSize();void add(Object obj);}
ConcreteAggregate
package com.lanhuigu.base.design.behavior.iterator;/** * ConcreteAggregate: 具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例 */public class ListImpl implements List {private Object[] list;private int index;private int size;public ListImpl() {// TODO Auto-generated constructor stubindex = 0;size = 0;list = new Object[100];}@Overridepublic Iterator iterator() {// TODO Auto-generated method stubreturn new IteratorImpl(this);}@Overridepublic Object get(int index) {// TODO Auto-generated method stubreturn list[index];}@Overridepublic int getSize() {// TODO Auto-generated method stubreturn this.size;}@Overridepublic void add(Object obj) {// TODO Auto-generated method stublist[index++] = obj;size ++;}}
Client
package com.lanhuigu.base.design.behavior.iterator;public class Test {public static void main(String[] args) {List list = new ListImpl();list.add("a");list.add("b");list.add("c");// 第一种迭代方式Iterator it = list.iterator();while (it.hasNext()) {System.out.println(it.next());}System.out.println("======");// 第二种迭代方式for (int i=0;i<list.getSize();i++) {System.out.println(list.get(i));}}}
运行结果:
0 0
- 设计模式(16)-迭代器模式(Iterator)
- 设计模式(16)------迭代器模式
- 设计模式(16)-迭代器模式
- 设计模式(16)--迭代器模式
- <设计模式16>迭代器模式
- 设计模式(16)--迭代器模式
- 设计模式-迭代器模式
- 设计模式 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 【设计模式】迭代器模式
- 设计模式-迭代器模式
- 设计模式- 迭代器模式
- 设计模式 - 迭代器模式
- 设计模式:迭代器模式
- 设计模式 - 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 跟着鬼哥学爬虫-4-根据需求爬工作需要内容
- WPF DevExpress 更换主题
- 设计模式(15)------解释器模式
- TI zigbee UART的两种模式
- Mac 下使用ISIS 处理数据 -CTX,HiRISE,LRO
- 设计模式(16)------迭代器模式
- 设计模式(17)------中介者模式
- 这只是一个测试博客Visual Studio Ultimate 2013,vs2013.5_ult_chs.iso,vs2013.5_ult_enu.iso
- Hi3516A开发--ethtool安装和使用
- 设计模式(18)------备忘录模式
- 设计模式(19)------观察者模式
- Robot Framework自动化测试--安装篇
- hdu 5551/Huatuo's Medicine
- CVPR2016目标检测新进展