文档章节

设计模式——iterator模式——简单解析

白天__黑夜
 白天__黑夜
发布于 2017/07/18 16:05
字数 686
阅读 8
收藏 0

对于iterator模式,可能很多同胞都有用过,也有大神做过讲解和深化,所以这次LZ就不哗众取宠,只说一些自己学习或者用到iterator时所产生的感想和总结,希望和大家交流一下。

LZ在示例中代码就不写全了,只表明这个模式原理即可,望见谅!

有两种方式定义iterator模式,大致相同:

第一种:通过构造函数进行传递,调用专有方法

第二种:通过定以内部类实现专有方法的调用

 

----------------------------------------------------------------------------------------------------

    定义一个Iterable接口,用于实现类来进行迭代器的获取。

public interface Iterable {

    Iterator iterator();
}

 

------------------------------------------------------------------------------------------------------

    定义一个Iterator 接口,用于各种实现类来进行统一的方法(重点)

public interface Iterator {

    boolean hashNext();
    
    Object next();
    
    int remove(int remove);
}

 

------------------------------------------------------------------------------------------------------

    定义一个用于实现迭代器的类。

public class ListTest implements Iterable{
    
    private Object object;

    @Override
    public Iterator iterator() {
        //传递本类对象
        return new ListIterator(this);
    }
 

//这个方法也是一个核心--当调用迭代器时是ListTest的属性去直接调用,并且直接返回了一个iterator,所以当中的数值需要通过这个set方法进行传递,之后在遍历等操作中才可以用到
    //当创建ListTest时并且赋值时,将数据存储,直接在此类中即可遍历
    public void set(Object object){
        this.object = object;
    }
    
    //ListTest自身的遍历方式
    public Object get(){
        
        //如果这是一个自定义的list的话,那么这里放的就是list的遍历方式
        return object;
    }
    
    //删除
    public int remove(){
        return 0;
    }
    
    
    //ListTest的长度,用来判断是否还有下一个
    public int size(){
        return 0;
    }
    
}

 

------------------------------------------------------------------------------------------------------

 

//第一种方法是在这个ListIterator 类中定义一个构造函数,用于将ListTest对象传递进来,然后调用其中的方法。

//第二种方法直接将ListIterator 类变为ListTest的内部类,直接使用外部类中的各种方法,需要注意的是这个内部类不能用static修饰(这样做的话就将内部类变为了静态类,无法使用外部类的方法)


class ListIterator implements Iterator{
    private ListTest list;
    
    public ListIterator(ListTest list){
        this.list = list;
    }
    
    @Override
    public boolean hashNext() {
        //在这里进行判断
        list.size();
        return true;
    }

    @Override
    public Object next() {
        //通过这个方法可以实现不同的值获取方式,比如list set map等
        return list.get();
    }

    @Override
    public int remove(int remove) {
        return list.remove();
    }
}

    对于iterator模式来说,可能真正自己定义这种模式的机会并不多,但是了解其中的原理和设计的思想对于我们却有着很大的帮助!

 

© 著作权归作者所有

白天__黑夜
粉丝 0
博文 2
码字总数 1314
作品 0
商洛
私信 提问
《JavaScript设计模式与开发实践》最全知识点汇总大全

系列文章: 《JavaScript设计模式与开发实践》基础篇(1)—— this、call 和 apply 《JavaScript设计模式与开发实践》基础篇(2)—— 闭包和高阶函数 《JavaScript设计模式与开发实践》模式...

嗨呀豆豆呢
01/04
0
0
《JavaScript设计模式与开发实践》原则篇(2)—— 最少知识原则

最少知识原则(LKP)说的是一个软件实体应当尽可能少地与其他实体发生相互作用。这 里的软件实体是一个广义的概念,不仅包括对象,还包括系统、类、模块、函数、变量等。 单一职责原则指导我们...

嗨呀豆豆呢
2018/12/30
0
0
《JavaScript设计模式与开发实践》模式篇(12)—— 装饰者模式

在传统的面向对象语言中,给对象添加功能常常使用继承的方式,但是继承的方式并不灵活, 还会带来许多问题:一方面会导致超类和子类之间存在强耦合性,当超类改变时,子类也会随之 改变;另一方...

嗨呀豆豆呢
2018/12/25
0
0
《JavaScript设计模式与开发实践》模式篇(11)—— 中介者模式

中介者模式的作用就是解除对象与对象之间的紧耦合关系。增加一个中介者对象后,所有的 相关对象都通过中介者对象来通信,而不是互相引用,所以当一个对象发生改变时,只需要通知 中介者对象即...

嗨呀豆豆呢
2018/12/23
0
0
Java 设计模式(14) —— 复合模式

一、复合模式 模式常一起使用,组合在一个设计解决方案中 复合模式在一个解决方案中结合两个或多个模式,能解决一般性或一系列的问题 二、示例 本次设计模式讲解中无代码示例,由于复合模式是...

磊_lei
2018/05/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
今天
9
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
今天
6
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
今天
8
0
Flutter 系列之Dart语言概述

Dart语言与其他语言究竟有什么不同呢?在已有的编程语言经验的基础上,我们该如何快速上手呢?本篇文章从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习Dart吧 一、...

過愙
今天
5
0
rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部