博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【行为型】- 迭代器模式
阅读量:6800 次
发布时间:2019-06-26

本文共 2249 字,大约阅读时间需要 7 分钟。

hot3.png

迭代器模式

提供一种方法顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部实现,可实现保护目标对象的目的。

应用:JDK自带的Collection框架

角色

  • 迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口

  • 具体迭代器角色(Concrete Iterator):具体迭代器角色要实现迭代器接口,并要记录遍历中的当前位置。

  • 容器角色(Container):容器角色负责提供创建具体迭代器角色的接口。

  • 具体容器角色(Concrete Container):具体容器角色实现创建具体迭代器角色的接口——具体迭代器角色与容器结构相关。


容器角色:Container

package com.zhiwei.iterator;public interface Container {    public void add(Object obj);    public void remove(Object obj);    public Iterator iterator();}

具体容器角色:ConcreteContainer

package com.zhiwei.iterator;import java.util.ArrayList;import java.util.List;public class ConcreteContainer implements Container {    private List list = new ArrayList();    /**    * 提供容器的迭代器访问接口    */    public Iterator iterator() {        return new ConcreteIterator(list);    }    /**    * 容器自身的添加元素操作    */    public void add(Object obj) {        list.add(obj);    }    /**    * 容器自身的减少元素操作    */    public void remove(Object obj) {        list.remove(obj);    }}

迭代器角色:Iterator

package com.zhiwei.iterator;public interface Iterator {	public Object next();	public boolean hasNext();}

具体迭代器角色:ConcreteIterator

package com.zhiwei.iterator;import java.util.ArrayList;import java.util.List;public class ConcreteIterator implements Iterator {    private List list = new ArrayList();    private int cursor = 0;    /**        * 迭代器关联具体的容器类        * @param list        */    public ConcreteIterator(List list) {        this.list = list;    }    /**        * 判断容器是否还有下一个元素        */    public boolean hasNext() {        if (cursor == list.size()) {            return false;        }        return true;    }    /**        * 获取容器下一个元素        */    public Object next() {        Object obj = null;        if (this.hasNext()) {            obj = this.list.get(cursor++);  //保存游标位置        }        return obj;    }}

测试代码:

Container container = new ConcreteContainer();container.add("小明");container.add("小红");container.add("小刚");//获取迭代器:容器对象和迭代器对象已经关联Iterator it = container.iterator();  while (it.hasNext()) {String str = (String) it.next();System.out.println(str);}

通俗解释: 投硬币去买地铁票,可确定买地铁票的机器肯定有一个存储地铁币的盒子,当我们投入硬币买票时候,买票机器能偶检测到剩余的地铁币的数量,然后返回给客户自身。这可将存放地铁币的盒子扮演具体容器角色,而买票机器可看作是一个迭代器,它知道容器里面所有信息,并为外界提供一个访问的接口,实现对具体容器对象(地铁币盒子)的信息隐蔽。

转载于:https://my.oschina.net/yangzhiwei256/blog/3013873

你可能感兴趣的文章
Redis之父表示ARM服务器没戏!
查看>>
java调用cmd命令并捕获执行结果字符串的代码
查看>>
Eclipse中android sdk升级ADT版本过低解决办法
查看>>
MDT 2013 从入门到精通之无法分析或处理pass[specialize]文件
查看>>
桌面支持--512-Rear chassis fan not detected
查看>>
Django 开源相册组件介绍 django-photologue
查看>>
IntelliJ IDEA 14 创建Web项目
查看>>
Redis server命令
查看>>
PeerConnection
查看>>
关于ext-js 中的自定义校验
查看>>
服务端response对象属性和方法
查看>>
护眼色
查看>>
Understanding Java Lambdas
查看>>
Java_基本数据类型
查看>>
Linux下安装JDK
查看>>
axis2报错:The following error occurred during schema generation: null
查看>>
Spring boot ServletRequest 修改header
查看>>
查看CentOS版本信息
查看>>
GPU应用程序Attach调试记录
查看>>
JS this指向详解
查看>>