Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >复习:GoF的23种设计模式之iterator模式(行为型)

复习:GoF的23种设计模式之iterator模式(行为型)

作者头像
营琪
发布于 2019-12-20 06:39:25
发布于 2019-12-20 06:39:25
40500
代码可运行
举报
文章被收录于专栏:营琪的小记录营琪的小记录
运行总次数:0
代码可运行
iterator模式(迭代器模式)

就如java集合中的iterator类似,是一种最简单也是最常用的设计模式。它可以让用户通过的特定接口轮询容器中的每一个元素,而不需要了解底层实现。

例如: 遍历一个数组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        int count = 5;
        String[] att = new String[count];
        for (int i = 0; i < count; i++) {
            System.out.println(att[i]);
        }

提问:要是我们的程序需要遍历十个、一百个不同实现的集合,那么我们是否需要编写十个、一百个不同的代码吗?

人类对于处理复杂事请,早已学会分层,将复杂、重复的事请,模块化、精细化、分门别类的处理。对于我们这”一百个不同 “的程序,我们会做的也是分层处理。

答:对于”一百个不同程序“的遍历,我们也进行模块化处理,我们先分析题意:

用户需要遍历”一百个不同的集合“,不想重复编写代码,需要有统一的遍历措施。

“一百个不同集合“需要实现统一的某个模块,或者集合需要包含某个统一遍历措施。

对于解决这个问题,既然是统一某些东西,那么我们可以想到的是 抽象类|接口。让所有集合都实现此接口。

实例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface Iterator {
    public Boolean hasNext();
    public Object next();
}

abstract class Aggregate {
    abstract Iterator createIterator();
}

class ConcreteAggregate extends Aggregate {
    private int last = 0;
    private String[] str;

    public ConcreteAggregate(int index) {
        this.str = new String[index];
    }

    public String getName(int index) {
        return str[index];
    }

    public void append(String name) {
        str[last] = name;
        last++;
    }

    public int getLast() {
        return last;
    }

    @Override
    Iterator createIterator() {
        return new ConcreteIterator(this);
    }
}

class ConcreteIterator implements Iterator {
    private ConcreteAggregate ca;
    private int index;
    public ConcreteIterator(ConcreteAggregate ca) {
        this.ca = ca;
    }
    public Boolean hasNext() {
        return ca.getLast() > index;
    }

    public Object next() {
        return ca.getName(index);
    }
}

public class iteratorTest {
    public static void main(String[] args) {
        ConcreteAggregate aggregate = new ConcreteAggregate(5);
        aggregate.append("假如一百个程序");
        System.out.println(aggregate.getName(0)+"都是不同的取元素方法");
        aggregate.append("不同的取元素方法");
        Iterator iterator = aggregate.createIterator();
        while (iterator.hasNext()) {
            iterator.next();
        }
    }
}

假如有一百个不同的集合需要遍历,那么编写”一百个集合“都需要继承Aggregate抽象类.

我们遍历时,只需要获取Iterator类,就可以编写一段遍历代码继而重复使用。 不管集合实现如何变化,都可以使用iterator遍历元素,不依赖于aggregate实现类。

UML类图

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
迭代器(Iterator)模式
迭代器(Iterator) Intent 提供一种顺序访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。 Class Diagram Aggregate 是聚合类,其中 createIterator() 方法可以产生一个 Iterator; Iterator 主要定义了 hasNext() 和 next() 方法; Client 组合了 Aggregate,为了迭代遍历 Aggregate,也需要组合 Iterator。 Implementation public interface Aggrega
MickyInvQ
2022/05/06
1800
迭代器(Iterator)模式
小谈设计模式(21)—迭代器模式
主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。
学编程的小程
2023/10/11
1740
小谈设计模式(21)—迭代器模式
【地铁上的设计模式】--行为型模式:迭代器模式
迭代器模式是一种行为型设计模式,它提供了一种遍历聚合对象中各个元素的方法,而不需要暴露该聚合对象的内部表示。这个模式分离了聚合对象的遍历行为,使得遍历算法能够与聚合对象分离开来,从而可以在不改变聚合对象的情况下定义新的遍历操作。迭代器模式由迭代器接口、具体迭代器类、聚合接口和具体聚合类等组成,其中迭代器接口定义了访问和遍历元素的方法,而聚合接口定义了创建迭代器的方法。迭代器模式的实现可以大大简化遍历聚合对象中元素的代码,同时也可以方便地新增不同类型的迭代器,从而为聚合对象提供不同的遍历行为。
喵叔
2023/05/09
3700
设计模式--迭代器模式
迭代器模式是一种行为型设计模式,它允许客户端遍历一种容器(如列表或数组)中的元素,并访问容器中的每个元素,而无需关心容器的内部实现。迭代器模式属性于单一职责原则,因为它将遍历和容器分离开来。
软件架构师Michael
2023/07/19
2800
设计模式实战-迭代器模式,最常用的设计模式之一
迭代器模式(Iterator Pattern)又称为游标(Cursor)模式,是最常被使用的几个模式之一,被广泛地应用到 Java 的 API 中。例如,Java 的集合(Collection)框架中,就广泛使用迭代器来遍历集合中的元素。
架构师修炼
2020/07/17
6270
【设计模式】—— 迭代模式Iterator
  模式意图   提供一个方法按顺序遍历一个集合内的元素,而又不需要暴露该对象的内部表示。   应用场景   1 访问一个聚合的对象,而不需要暴露对象的内部表示   2 支持对聚合对象的多种遍历   
用户1154259
2018/01/18
4810
【设计模式】—— 迭代模式Iterator
设计模式01——Iterator模式
迭代器(Iterator)模式,从其英文单词可以看出,有反复做某件事的意思。迭代器模式常用于数据集合中,对数据集合中的数据按照顺序进行遍历。它能提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。
itlemon
2020/04/03
5530
设计模式01——Iterator模式
Java描述设计模式(13):迭代器模式
一、迭代器模式 1、基础概念 迭代器模式又叫游标模式,是对象的行为模式。迭代器模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象。 2、模式图解 3、核心角色 Iterator:迭代器角色
知了一笑
2019/09/24
3920
Java描述设计模式(13):迭代器模式
Java设计模式之迭代器模式
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
BUG弄潮儿
2022/06/30
1960
Java设计模式之迭代器模式
迭代器模式 Iterator 行为型 设计模式(二十)
在计算机中,Iterator意为迭代器,迭代有重复的含义,在程序中,更有“遍历”的含义
noteless
2018/12/26
3480
JAVA 设计模式 迭代器模式
本文介绍了 JAVA 设计模式中的迭代器模式,主要包括了迭代器模式的定义、结构、实现,以及应用场景和推荐。
静默虚空
2018/01/05
8580
JAVA 设计模式 迭代器模式
C#设计模式18——迭代器模式的写法
迭代器模式是一种行为型设计模式,它允许客户端通过一种统一的方式遍历集合对象中的元素,而无需暴露集合对象的内部结构。
明志德道
2023/10/21
1470
23种设计模式(一) —— 手写实现 Iterator模式
用于在数据集合中按照顺序遍历集合,iterator 有反复做某件事的意思,因此称为“迭代器”,所以称为 迭代器模式
Gorit
2021/12/08
2930
23种设计模式(一) —— 手写实现 Iterator模式
设计模式——迭代器模式
设计模式——迭代器模式
Java架构师必看
2021/05/14
3650
设计模式——迭代器模式
迭代器模式(Iterator)
迭代器模式(Iterator) 迭代器模式(Iterator)[Cursor] 意图:提供一种方法顺序访问一个聚合对象中的每个元素,而又不想暴露该对象的内部表示。 应用:STL标准库迭代器实现、Jav
Florian
2018/02/05
5500
迭代器模式(Iterator)
「聊设计模式」之迭代器模式(Iterator)
🏆本文收录于《聊设计模式》专栏,专门攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎持续关注&&收藏&&订阅!
bug菌
2023/11/15
3680
「聊设计模式」之迭代器模式(Iterator)
Java设计模式(十六)----迭代子模式
迭代子模式 一、 概述 二、 结构 1.白箱聚集与外禀迭代子 2.黑箱聚集与内禀迭代子 主动迭代子和被动迭代子 静态迭代子和动态迭代子 Fail Fast Fail Fast在JAVA聚集中的使用 迭代子模式的优点 一、概述 1.定义 迭代子模式又叫游标(Cursor)模式,是对象的行为模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的
汤高
2018/01/11
7370
Java设计模式(十六)----迭代子模式
迭代器模式
在面向对象编程里,迭代器模式是一种最简单也最常见的设计模式。它可以让用户透过特定的接口访问集合中的每一个元素而不用了解底层的实现。一般实现一个集合的方法有:数组,链表,哈希表等等,每种集合因为底层实现不同,遍历集合的方法也不同。对于数组或者列表,用户需要在对集合了解很清楚的前提下,可以自行遍历对象,但是对于hash表来说,用户遍历起来就比较麻烦,而且暴露了集合类的内部表示给用户,数据也会不安全。而引入了迭代器方法后,用户用起来就简单的多了,并且更加安全。迭代器模式在客户访问类与集合类之间插入一个迭代器,这分离了聚合对象与其遍历行为,对客户也隐藏了其内部细节,且满足“单一职责原则”和“开闭原则”。所以,如果我们对各种集合的都实现了迭代器接口,就可以使存储数据和遍历数据的职责分离,并且让外部代码可以透明并统一地访问集合内部的数据,简化了遍历方式,还提供了良好的封装性,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用关心。
小蜜蜂
2019/07/14
6500
设计模式---迭代器模式
很早之前,我们的电视调节频道是需要用电视上的按钮去控制的,那时并没有遥控器,如果我们想要调台,只能一次又一次的拧按钮。
大忽悠爱学习
2021/11/15
3900
06-04-设计模式 迭代器模式
编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图
彼岸舞
2022/05/28
1450
06-04-设计模式 迭代器模式
相关推荐
迭代器(Iterator)模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文