文档章节

【行为型】- 迭代器模式

ZeroneLove
 ZeroneLove
发布于 02/23 10:52
字数 700
阅读 23
收藏 0

迭代器模式

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

应用: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<Object> list = new ArrayList<Object>();

    /**
    * 提供容器的迭代器访问接口
    */
    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<Object> list = new ArrayList<Object>();
    private int cursor = 0;

    /**
        * 迭代器关联具体的容器类
        * @param list
        */
    public ConcreteIterator(List<Object> 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);
}

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

© 著作权归作者所有

ZeroneLove
粉丝 5
博文 164
码字总数 133695
作品 0
深圳
高级程序员
私信 提问
设计原则和设计模式_Index

设计原则 1.1 什么是设计原则 ?(https://my.oschina.net/jimilee/blog/732569) 1.2 设计原则如何用? 1.3 设计原则详解 1.4 30分钟快速理解面向对象设计原则 2. 设计模式 2.1 什么时候使用设...

无寄语
2016/08/14
1
0
设计模式之迭代器模式(行为型)

[TOC] 一、模式定义 迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor),所以迭代器模式是一种对象行为型。 二、模式角色 It...

smileNicky
04/13
0
0
设计模式-迭代器模式

迭代器模式概述 迭代器模式, 我觉得这个图还是很贴切的. 迭代器相当于是电视机的遥控器, 聚合对象相当于是电视机. 电视机中有很多电视频道的集合, 那些电视频道到底是怎么组合在一起的, 我们...

hell03W
2016/11/15
33
0
行为型模式之九:迭代器模式

迭代器模式用于迭代集合对象,他是一个很常用的模式,你可以在之前使用过他,可能你见过像hasNext()和next(),他可能是迭代器模式,比如,你可能迭代访问数据库记录。 迭代器模式类图 迭代器...

刀狂剑痴
2015/08/27
16
0
Javascript设计模式与开发实践详解(四:迭代器模式)

迭代器模式是指一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,不需要关心对象的内部...

littl_Prince
2016/04/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
今天
3
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
今天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
今天
19
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
今天
9
0
太全了|万字详解Docker架构原理、功能及使用

一、简介 1、了解Docker的前生LXC LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpa...

Java技术剑
今天
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部