Iterator模式简单实现

1.什么是Iterator?

我们都知道,for语句的i++的作用是让循环后i自增1,我们把这种循环变量的作用抽象化,形成一种模式,这种模式就是Iterator(迭代器模式)

2.Iterator模式的角色

说到设计模式,就不能不介绍它的几个重要的角色:

  • Iterator(迭代器)
    该接口提供hasNext(),next()两个方法。作用是定义按顺序遍历元素。
  • Concretelterator(具体的迭代器)
    该类实现了Iterator接口,实现了是否包含下一个元素的hasNext()方法和获取下一个元素方法next()。
  • Aggregate(集合)
    改接口提供一个方法,返回一个迭代器。
  • ConcreteAggregate(集合的实现)
    改类实现了Aggregate接口,返回一个迭代器(Concretelterator的具体类)。

下面是UML图

3.代码实现

1.Aggregate (集合)

/**
 * @projectName javabasic
 * @package com.yic.javabasic.iterator
 * @interfaceName Aggregate
 * @author KimHung Yic
 * @description
 * @date 2020/8/21 21:15
 * @version 1.0
 */
public interface Aggregate {
    
    Iterator iterator();

}

2.BookShelf(集合实现)

/**
 * @author KimHung Yic
 * @version 1.0
 * @projectName javabasic
 * @package com.yic.javabasic.iterator
 * @className BookShelf
 * @description
 * @date 2020/8/21 21:23
 */
public class BookShelf implements Aggregate {

    private Book[] books;
    private int last = 0;

    public BookShelf(int maxSize) {
        this.books = new Book[maxSize];
    }

    public Book getBookAt(int index){
        return books[index];
    }

    public void appendBook(Book book) {
        this.books[last] = book;
        last++;
    }

    public int getLength(){
        return last;
    }

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

3.Iterator (迭代器)

/**
 * @projectName javabasic
 * @package com.yic.javabasic.iterator
 * @interfaceName Iterator
 * @author KimHung Yic
 * @description
 * @date 2020/8/21 21:20
 * @version 1.0
 */
public interface Iterator {

    boolean hasNext();

    Object next();
}

4.BookShelfIterator(迭代器实现)
 

/**
 * @author KimHung Yic
 * @version 1.0
 * @projectName javabasic
 * @package com.yic.javabasic.iterator
 * @className BookShelfIterator
 * @description
 * @date 2020/8/21 21:27
 */
public class BookShelfIterator implements Iterator{

    private BookShelf bookShelf;
    private int index;

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

    @Override
    public boolean hasNext() {
        return index < bookShelf.getLength();
    }

    @Override
    public Object next() {
        Book book = bookShelf.getBookAt(index);
        index++;
        return book;
    }
}

---来自《图解设计模式》
---本人菜鸟一枚,随便记录一下,若有错误,多谢大家指点。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值