我学会了,迭代器模式

简介: 迭代器模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。

前言

迭代器模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。

迭代器模式

使用场景:不直接暴露一个对象的内部显示,通过返回的一个迭代器来实现遍历的效果。让存储数据的容器和获取容器内部数据的行为解耦。

理解:这是一种类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,很特别。将数据的遍历操作和数据集合解耦了,当然它本来就是用来遍历集合对象,非常的方便。

namespace action_mode_06 {

    // 接口
    interface Iterator {

        hasNext(): boolean

        next(): Object

    }

    // 用于遍历学生列表的迭代器
    class StudentIterator implements Iterator {

        private studentList: StudentList
        private cur: number = 0;

        constructor(studentList: StudentList) {
            this.studentList = studentList
        }

        hasNext(): boolean {
            const result = this.studentList.list.length > this.cur && this.cur > -1;

            if (this.cur === this.studentList.list.length) {
                this.cur = 0;
            }

            return result
        }
        next(): Student {

            if (this.cur === this.studentList.list.length) {
                this.cur = 0
            }

            const result = this.studentList.list[this.cur]
            this.cur++

            return result
        }
    }

    // 学生模型
    class Student {

        name: string;
        classLevel: number;
        sex: string;

        constructor(name: string, classLevel: number, sex: string) {
            this.name = name;
            this.classLevel = classLevel;
            this.sex = sex;
        }

        getIterator() {

        }
    }

    // 学生列表
    class StudentList {

        list: Array<Student> = new Array()

        push(student: Student) {
            this.list.push(student)
            return this.list.length
        }

        getIterator(): StudentIterator {
            return new StudentIterator(this)
        }
    }

    // 使用
    const studentList = new StudentList()
    for (let i = 0; i < 30; i++) {
        const student = new Student(`zs${i}`, i, i % 2 === 0 ? '男' : '女')
        studentList.push(student)
    }

    const iterator = studentList.getIterator()
    
    // 遍历第一次 
    while(iterator.hasNext()) {
        const student = iterator.next()
        console.log(`${student.name}:我来自${student.classLevel}班,性别:${student.sex}`)
    }

    // 遍历第二次
    while(iterator.hasNext()) {
        const student = iterator.next()
        console.log(`${student.name}:我来自${student.classLevel}班,性别:${student.sex}`)
    }

}
目录
相关文章
【408计算机组成原理】—原码的乘法运算(九)
【408计算机组成原理】—原码的乘法运算(九)
|
7月前
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(07) 她气鼓鼓递来一条SQL | 怎么看执行计划、SQL怎么优化?
在日常研发工作当中,系统性能优化,从大的方面来看主要涉及基础平台优化、业务系统性能优化、数据库优化。面对数据库优化,除了DBA在集群性能、服务器调优需要投入精力,我们研发需要负责业务SQL执行优化。当业务数据量达到一定规模后,SQL执行效率可能就会出现瓶颈,影响系统业务响应。掌握如何判断SQL执行慢、以及如何分析SQL执行计划、优化SQL的技能,在工作中解决SQL性能问题显得非常关键。
|
6月前
|
JavaScript 前端开发 Java
Idea启动SpringBoot程序报错:Veb server failed to start. Port 8082 was already in use;端口冲突的原理与解决方案
本文解决了Idea启动SpringBoot程序报错:Veb server failed to start. Port 8082 was already in use的问题,并通过介绍端口的使用原理和操作系统的端口管理机制,可以更有效地解决端口冲突问题,并确保Web服务器能够顺利启动和运行。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
11月前
|
SQL 安全 关系型数据库
sql注入原理和sqlmap命令的基础命令以及使用手法
sql注入原理和sqlmap命令的基础命令以及使用手法
|
10月前
|
存储 监控 安全
深入理解ThreadLocal:线程局部变量的机制与应用
在Java的多线程编程中,`ThreadLocal`变量提供了一种线程安全的解决方案,允许每个线程拥有自己的变量副本,从而避免了线程间的数据竞争。本文将深入探讨`ThreadLocal`的工作原理、使用方法以及在实际开发中的应用场景。
215 2
|
10月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
传感器 算法 数据可视化
ROS2教程04 ROS2话题
这篇文章是关于ROS2(Robot Operating System 2)的教程,主要介绍了ROS2中话题的概念、特性、使用方式,以及如何编写发布者和订阅者的代码。
461 3
ROS2教程04 ROS2话题
|
11月前
|
机器学习/深度学习 自然语言处理 算法
神经网络算法以及应用场景和基本语法
神经网络算法以及应用场景和基本语法
236 0
|
弹性计算 运维 Cloud Native
长虹佳华章宇:为计算巢入驻ISV提供软件分销能力
点击直达长虹佳华店铺:https://market.aliyun.com/store/4925812/index.html | 长虹佳华云生态商业部总经理章宇在【云栖大会计算巢专场】发表了题为《长虹佳华为计算巢入驻ISV提供软件分销能力》的主题分享,为大家介绍了长虹佳华的发展历程,以及亿氪虹云如何提供SaaS加速服务和SaaS分销在计算巢的最佳实践。