【图解设计模式】图解设计模式之 【Iterator】模式

本文通过一个图书架的例子介绍了迭代器设计模式。该模式将遍历逻辑从集合类中分离出来,使得客户端可以独立于底层的数据结构进行操作。文章提供了完整的Java实现代码,并解释了为何采用此模式。

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

首先附上 示例程序类图:

实例源代码:

Aggregate.java

package IteratorPattern;

import java.util.Iterator;

public interface Aggregate {
	public abstract Iterator iterator();
}

 Book.java

package IteratorPattern;

public class Book {
	private String name;

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

	public String getName() {
		return name;
	}
}

 BookShelf.java

package IteratorPattern;

import java.util.Iterator;

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);
	}

}

BookShelfIterator.java 

package IteratorPattern;

import java.util.Iterator;

public class BookShelfIterator implements Iterator {
	private BookShelf bookShelf;
	private int index;

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

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

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

}

Main.java 

package IteratorPattern;

import java.util.Iterator;

public class Main {

	public static void main(String[] args) {
		BookShelf bookShelf = new BookShelf(4);
		bookShelf.appendBook(new Book("Around the World in 80 Days"));
		bookShelf.appendBook(new Book("Bible"));
		bookShelf.appendBook(new Book("Cinderella"));
		bookShelf.appendBook(new Book("Daddy-Long-Legs"));
		Iterator it = bookShelf.iterator();
		while (it.hasNext()) {
			Book book = (Book) it.next();
			System.out.println(book.getName());
		}
	}

}

总结: 

1).为什么要引入Iterator 这种设计模式呢?

 因为Iterator 将遍历与实现分离开来.

例如:while (it.hasNext()) {
            Book book = (Book) it.next();
            System.out.println(book.getName());
        }

这段代码中,只是使用了Iterator 的 hasNext() 和next() 方法,并没有调用BookShelf 方法.

也就是,这里while循环并不依赖于 BookShelf 的实现

设计模式的作用就是帮助我们编写可复用的类。“可复用”就是将类实现为“组件”,当一个组件发生改变时,不需要对其他的组件进行修改或只需很小的修改即可应对。

就好比汽车的轮带并不单独针对某一款汽车而设计,而是针对所有汽车而设计,即使你把汽车改装成飞机,只要轮胎没问题,照样能跑.

源代码下载地址:https://download.youkuaiyun.com/download/csp_6666/11064624 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值