当前位置: 萬仟网 > 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

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

相关文章:

  • 设计模式漫谈之模板方法

    最近也是挺烦的,博客园做为程序员的家园,其实不假。虽然现在写出的随笔,看的人少。就当自娱自乐了。烦恼就是矛盾引起的,人很多想法都会被外界环境影响。比... [阅读全文]
  • 017.[转] 设计模式

    http://www.cnblogs.com/xing901022/p/4034492.html ... [阅读全文]
  • 大话设计模式—观察者模式

    观察者模式(Observer Design Pattern)也被称为发布订阅模式(Publish-Subscri... [阅读全文]
  • 设计模式之中介者模式(Mediator )

    设计模式之中介者模式(Mediator )

    中介者模式是关于数据交互的设计模式,该模式的核心是一个中介者对象,负责协调一系列对象之间的不同的数据请求,这一系列对象成为同事类。如房产中介(简直不... [阅读全文]
  • 设计模式-建造者模式

    设计模式-建造者模式

    建造者模式 ✅ 建造者模式用于构建复杂的不可变的对象 其实上面这句话就是建造者模式的灵魂,复杂的对象,例如拥有很多成员变量的类,我们假设让它不可变,... [阅读全文]
  • 结合Mybatis源码看设计模式——外观模式

    结合Mybatis源码看设计模式——外观模式

    定义 提供了一个统一的接口,用来访问子系统中一群接口 适用场景 详解 外观模式,主要理解外观。通俗一点可以认为这个模式是将子系统封装到一起,提供给应... [阅读全文]
  • 设计模式漫谈之迭代器模式

    谈恋爱是两个人的事,结婚是两个家庭的事。最近事也挺多的。我也挺烦的,有时候,我也为自己的将来担忧,我自认为自己的技术过硬,但是千里马只有遇到伯乐才能... [阅读全文]
  • 设计模式-适配器模式

    适配器模式:解决重构的问题,新东西和旧系统不吻合,通过组合/继承进行配 适配器:插座,电源适配器,做个转接的 程序员已经确定好规范IHelper,新... [阅读全文]
  • 设计模式 - 七大设计原则(一)

    设计模式 - 七大设计原则(一)

    设计模式 七大设计原则(一) 概述 简单介绍一下七大设计原则: 开闭原则:是所有面向对象设计的核心,对扩展开放,对修改关闭 依赖倒置原则:针对接口编... [阅读全文]
  • JAVA设计模式之策略模式 - Strategy

    JAVA设计模式之策略模式 - Strategy

    在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表... [阅读全文]
验证码:
Copyright © 2017-2021  萬仟网 保留所有权利. 粤ICP备17035492号-1
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com