设计模式学习笔记(1)-迭代器模式

本文详细介绍了迭代器模式在Java中的应用,通过具体实例展示了如何创建Iterator及Iterable接口,实现ConcreteIterable与ConcreteIterator类,以及如何使用这些组件来遍历集合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在看设计模式,今天看的是迭代器Iterator模式,在Java容器部分用的比较多。

个人认为迭代器模式的最大优点在于对使用者隐藏了细节,使遍历,删除等一些操作比较容易。

迭代器模式实现的要点:

1.创建Iterator及Iteratable接口。

2.创建ConcreteIterable类,实现Iterable接口去提供创建Iterator对象的方法。

3.创建ConcreteIterator类,实现Iterator接口去实现hasNext(),next()方法。

下面是我自己参考书本写的一个实验代码:

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

public class Book {
    private String name = "";
    public Book(String name) {
        this.name = name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
}
public class BookShelf implements Iterable<Book>{
    private Book[] books;
    private int last = 0;
    public BookShelf(int maxSize){
        books = new Book[maxSize];      
    }

    @Override
    public Iterator<Book> iterator() {
        return new BookShelfIterator();
    }

    private Book getBookAt(int index) {
        return books[index];
    }
    
    public void appendBook(Book book) {
        books[last] = book;
        last++;
    }
    
    private int getLength(){
        return last;
    }
    
    class BookShelfIterator implements Iterator<Book> {
        private int index = 0;

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

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

}

public class Test {
    public static void main(String[] args) {
        BookShelf bookShelf = new BookShelf(100);
        bookShelf.appendBook(new Book("Algortihm"));
        bookShelf.appendBook(new Book("The C programing language"));
        bookShelf.appendBook(new Book("Programmer"));
        bookShelf.appendBook(new Book("Design Patterns"));
        Iterator<Book> iterator = bookShelf.iterator();
        while(iterator.hasNext()) {
            Book book = iterator.next();
            System.out.println(book.getName());
        }       
    }
}

需要注意的是next()方法并不是返回下一个元素,而是返回当前的元素,并调整指针位置使其指向下一个元素,创建好Iterator后调用next返回的是第一个元素。

 

转载于:https://www.cnblogs.com/yunzhong/p/3470331.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值