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

若写的不好,请斧正。

猜你喜欢

转载自blog.csdn.net/weixin_40649194/article/details/89366370