当前位置: 萬仟网 > IT编程>软件设计>设计模式 > 设计模式之迭代器模式(Iterator)

设计模式之迭代器模式(Iterator)

2021年01月05日  | 萬仟网IT编程  | 我要评论
Iterator用于在数据集合中按照顺序遍历集合。英文单词Iterate有反复做某件事情的意思

1.介绍

一个一个遍历
在这里插入图片描述

  • 定义:
    提供一种方法,顺序访问一个集合对象中的各个元素,而不暴露该对象的内部表示

  • 适用场景:
    访问一个集合对象的内容而无需暴露它的内部表示
    为遍历不同的集合结构提供一个统一的接口

  • 优点:
    分离集合对象的遍历行为

  • 缺点:
    类的个数成对增加

案例场景

  • 遍历书架上的书
    在这里插入图片描述

类和接口一览表

在这里插入图片描述

名字说明
Aggregate表示集合的接口
Iterator遍历集合的接口
Book表示书中的类
BookShelf表示书架的类
BookShelfIterator遍历书籍的类
Main测试程序的入口

Aggregate

只有一个iterator接口,生成一个用于遍历集合的迭代器

public interface Aggregate {
    Iterator iterator();
}

Iterator接口

声明两个方法,hasNext():用于判断是否存在下一个元素,next():获取下一个元素

public interface Iterator<T> {
    boolean hasNext();
    T next();
}

Book类

书的实体对象,getName 获取书名

public class Book {

    private String name;

    public Book(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

BookShelf类

表示书架的类,由于该类作为集合进行处理,因此实现Aggregate接口

public class BookShelf implements Aggregate {
    private List<Book> books = new ArrayList<Book>();

    public Integer length() {
        return books.size();
    }

    public Book get(Integer index) {
        return books.get(index);
    }

    public void add(Book book) {
        books.add(book);
    }


    public Iterator iterator() {
        return new BookShelfIterator(this);
    }
}

BookShelfIterator类

用于遍历书架上书的类

public class BookShelfIterator implements Iterator<Book> {
    private BookShelf bookShelf;
    private Integer index;


    public BookShelfIterator(BookShelf bookShelf) {
        this.bookShelf = bookShelf;
        this.index = 0;
    }

    public boolean hasNext() {
        return index < bookShelf.length();
    }

    public Book next() {
        return bookShelf.get(index++);
    }
}

Main入口

public class Main {
    public static void main(String[] args) {
        BookShelf bookShelf =new BookShelf();
        bookShelf.add(new Book("Java"));
        bookShelf.add(new Book("C++"));
        bookShelf.add(new Book("PHP"));
        bookShelf.add(new Book("数据结构"));
        bookShelf.add(new Book("线性代数"));

        Iterator iterator = bookShelf.iterator();
        while (iterator.hasNext()){
            Book next = (Book) iterator.next();
            System.out.println(next.getName());
        }
    }
}

Iterator模式中各角色的作用

Iterator(迭代器)

该角色责任定义按顺序逐个遍历元素的接口。
程序中,由Iterator接口扮演,定义了hasNext和next两个方法。

Concretelterator(具体的迭代器)

该角色负责实现Iterator角色所定义的接口.该角色包含了遍历集合所必须的信息

Aggregate(集合)

该角色负责定义创建Iterator角色的接口。这个接口是一个方法会创建出一个,按照顺序访问保存在内部元素的信息

ConcreteAggregate(具体集合)

该角色负责实现Aggregate角色所定义的接口。他会创建出具体的Iterator角色,也就是ConcreteIterator,也就是实例中的BookShelf
Iterator 模式的类图
在这里插入图片描述

本文地址:https://blog.csdn.net/cen50958/article/details/112254012

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

  • 设计模式(总纲)

    概念:设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 以下是对上面有下划线的关键字的通俗解释: 优点: 设计模式可以帮... [阅读全文]
  • 【面试题】研究过tomcat的NioEndpoint源码吗?请阐述下Reactor多线程模型在tomcat中的实现。

    【面试题】研究过tomcat的NioEndpoint源码吗?请阐述下Reactor多线程模型在tomcat中的实现。

    tomcat的底层网络NIO通信基于主从Reactor多线程模型。它有三大线程组分别用于处理不同的逻辑:Acce... [阅读全文]
  • 设计模式学习笔记 ———— 简单工厂模式

    # 背景 简单工厂模式是很多程序员学习的第一个设计模式,因为其不但原理简单而且易于上手,在日常工作的代码中也常有体现。今天分享一个基于实现“加”、“... [阅读全文]
  • 条件语句重构分析

    条件语句重构分析 "策略模式重构条件语句" "状态模式重构条件语句" "多态重构条件语句" 其实这三种方式都是基于多态实现的,直接加上了各个的特性罢... [阅读全文]
  • Matlab单例模式

    classdef SingletonClass < handle methods(Access = private) function obj... [阅读全文]
  • 行为模式之迭代器模式

    行为模式之迭代器模式

    迭代器模式(Iterator Pattern)是最常被使用的几个模式之一,被广泛地应用到Java的API中。 定义:提供一种方法访问一个容器对象中各... [阅读全文]
  • 【设计模式】单例模式

    定义 确保某个类只有一个实例 实现方式 饿汉式加载(线程安全) 等价于 懒汉式加载 非线程安全 线程安全 1. Double Check 2. 借助La... [阅读全文]
  • 行为模式之访问者模式

    行为模式之访问者模式

    访问者模式(Visitor Pattern)的目的是封装一些于某种数据结构元素之上的操作,一旦这些元素需要修改,接受这个操作的数据结构则可以保持不变... [阅读全文]
  • 大话设计-策略模式

    记录大话设计的学习。大话设计模式pdf分享:https://pan.baidu.com/s/11h9x-4RffXydf3GFH5_y7g ... [阅读全文]
  • 设计模式之单例模式

    单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 通常我们可以定义一个全局变量使得一个对象被访问,但它不能阻止我们实例化多个对象,所... [阅读全文]
验证码:
Copyright © 2017-2021  萬仟网 保留所有权利. 粤ICP备17035492号-1
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com