迭代器模式
来源:互联网 发布:非极大值抑制 知乎 编辑:程序博客网 时间:2024/04/30 02:04
我最早接触的设计模式就是迭代器模式了哈;为什么要有迭代器模式呢?看下下面的代码就知道了哈:
//对于一个数组对象sz;我们要怎么遍历呢?public void bianlisz(){for(int i=0;i<sz.length;i++){//对每个sz[i]访问}}//对于一个ArrayList的类对象al;我们要怎么遍历呢?public void bianliAL(){for(int i=0;i<al.size();i++){//对每个al.get(i)访问}}
遍历它们需要知道它们是实现方式,如果我们用迭代器那么遍历他们则不需要关心他们的实现细节了!
假设有两个类geweishu和liangweishu,他们分别用数组和ArrayList来实现,那么我们怎么用iterator来实现呢?
Iterator接口系统有提供,但是我们自己写个MyIterator代替加深理解;
类图如下所示:
备注:因为geweishuIterator类只为geweishu类服务,所以geweishuIterator类可以写成它的一个内部类,同理liangeweishuIterator也是liangweishu的内部类;
代码如下所示:
interface MyIterator{public boolean hasNext();public Object next();}class geweishu{ArrayList<Integer> Items ;MyIterator mi;public geweishu(){Items = new ArrayList<Integer>();for(int i=0;i<10;i++){Items.add(i);}}public MyIterator getIterator(){return new geweishuIterator();}private class geweishuIterator implements MyIterator{int i;int data;public geweishuIterator(){i = 0;}@Overridepublic boolean hasNext() {// TODO Auto-generated method stubif(Items.size() <= i){return false;}return true;}@Overridepublic Object next() {// TODO Auto-generated method stubtry{data = Items.get(i);}catch (IndexOutOfBoundsException e){System.out.println("no data exit");}i++;return data;}}}class liangweishu{int[] Items ;MyIterator mi;public liangweishu(){Items = new int[90];for(int i=10;i<100;i++){Items[i-10] = i;}}public MyIterator getIterator(){return new liangweishuIterator();}private class liangweishuIterator implements MyIterator{int i;int data;public liangweishuIterator(){i = 0;}@Overridepublic boolean hasNext() {// TODO Auto-generated method stubif(Items.length <= i){return false;}return true;}@Overridepublic Object next() {// TODO Auto-generated method stubtry{data = Items[i];}catch (IndexOutOfBoundsException e){System.out.println("no data exit");}i++;return data;}}}测试代码:public class test {public static void main(String[] args) {geweishu gws = new geweishu();liangweishu lws = new liangweishu();MyIterator gwsIterator = gws.getIterator();MyIterator lwsIterator = lws.getIterator();while(gwsIterator.hasNext()){System.out.print(gwsIterator.next());}while(lwsIterator.hasNext()){System.out.print(lwsIterator.next());}}}
定义:
迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示;
0 0
- 行为模式-迭代器模式
- 设计模式-迭代器模式
- 设计模式 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 【设计模式】迭代器模式
- 设计模式-迭代器模式
- 设计模式- 迭代器模式
- 设计模式 - 迭代器模式
- 设计模式:迭代器模式
- 行为模式-迭代器模式
- 设计模式 - 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 设计模式---迭代器模式
- 设计模式---迭代器模式
- 【设计模式】迭代器模式
- 设计模式 迭代器模式
- RHCS集群理论暨 最佳实践
- 【逆元】ZOJ 3609 Modular Inverse
- Storm实时流处理Hello World
- c#,用面向对象思想写一个计算器
- VS2010版快捷键
- 迭代器模式
- IBM TSM 6.3学习笔记(2)
- HDU 2841 Visible Trees 解题报告(筛 or 容斥原理)
- Eclipse配置Tomcat
- 俗话说的辩证法
- 数据挖掘开源软件:WEKA基础操作
- Android按键之Menu详解
- Fedora下更快捷地打开终端
- C/C++编程语言中的基础知识(一)--格式化输入输出