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

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

直接上代码,只是个人学习记录。
本文最后有本人对迭代器模式的个人理解,请斧正。

Iterator类(接口类)
public interface Iterator {
	public abstract boolean hasNext();

	public abstract Object next();
}
BookShelfIterator类(实现Iterator接口类)
import java.util.Iterator;

public class BookShelfIterator implements Iterator {
	/*
	 * 	此处的对象,类型如BookShelf bookShelf,根据实际需要定义
	 * 	下面代码亦是
	 */
	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;
	}

}
Aggregate类(接口类)
import java.util.Iterator;

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

BookShelf类(实现Aggregate接口类)
import java.util.ArrayList;
import java.util.Iterator;

public class BookShelf implements Aggregate {
	private ArrayList list = new ArrayList();
	private int last = 0;

	public Book getBookAt(int index) {
		return (Book) list.get(index);
	}

	public void appendBook(Book book) {
		list.add(book);
		last++;
	}

	public int getLength() {
		return list.size();
	}

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

}
Book类(实体类)
public class Book {
	private String name;

	public String getName() {
		return name;
	}

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

}
Main类(测试类)
import java.util.Iterator;

public class Main {
public static void main(String[] args) {
	BookShelf bookShelf=new BookShelf();
	bookShelf.appendBook(new Book("1"));
	bookShelf.appendBook(new Book("2"));
	bookShelf.appendBook(new Book("3"));
	bookShelf.appendBook(new Book("4"));
	Iterator iterator=bookShelf.iterator();
	while (iterator.hasNext()) {
		Book book=(Book) iterator.next();
		System.out.println(book.getName());
	}
}
}
个人理解

迭代器模式将存储数据和遍历数据的职责分离,将遍历数据的责任交给类中特定的接口对外展示,无须暴露该对象的内部表示,保证了数据的安全性。
如何实现迭代器模式呢?我们主要解决的问题在于将在元素之间游走的责任交给迭代器,而不是聚合对象。
创建一个Iterator接口,将所需要用到迭代的方法写入,如hasNext()与next();
具体实现交给具体的迭代类去实现。
最后只需在类中调用具体的迭代类就可实现迭代器模式。
BookShelf类中
@Override
public Iterator iterator() {
return new BookShelfIterator(this);
}

若写的不好,请斧正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值