設(shè)計(jì)模式 - 迭代器模式 - Itreator
概念
? 它提供一種方法訪問一個(gè)容器對(duì)象中的各個(gè)元素,而不需要暴露該對(duì)象的內(nèi)部細(xì)節(jié)
概念說明
- 迭代器是為容器服務(wù)的,那么什么是容器?能夠容納對(duì)象的所有類型(Collection集合類型、Set類型等)
- 迭代器模式就是為了解決便利這些容器中元素而誕生的
UML

迭代器模式-UML.png
Itreator(迭代器角色):負(fù)責(zé)定義訪問和遍歷元素的接口;JDK已定義
-
ConcreteIterator(具體迭代器角色):實(shí)現(xiàn)迭代器接口,完成容器元素遍歷;
迭代器中刪除元素:1.刪除當(dāng)前元素;2.當(dāng)前游標(biāo)指向下一個(gè)元素
-
Iterable(獲取迭代器角色):返回一個(gè)迭代器,實(shí)現(xiàn)該接口允許對(duì)象稱為ForEarch語(yǔ)句的目標(biāo)
(就可以通過forEarch語(yǔ)句遍歷容器)
ConcreateIterable(具體獲取迭代器角色):一般容器類實(shí)現(xiàn)Iterable(如AbstractList)
例子
? 迭代器實(shí)現(xiàn)
public class ArrayIterator implements Iterator<String> {
private BookArray bookArray;
private int index;
public ArrayIterator(BookArray bookArray) {
this.bookArray = bookArray;
}
@Override
public boolean hasNext() {
if (index < bookArray.size()) {
return true;
} else {
return false;
}
}
@Override
public String next() {
return bookArray.getBook(index++);
}
@Override
public void remove() {
// TODO Auto-generated method stub
}
}
? 容器實(shí)現(xiàn)
public class BookArray implements Iterable<String>{
private String[] books;
private int index;
public BookArray(int arraySize) {
books = new String[arraySize];
}
@Override
public Iterator<String> iterator() {
return new ArrayIterator(this);
}
public void addBook(String book) {
if (index > books.length)
throw new RuntimeException("index out of array size!");
this.books[index++] = book;
}
public String getBook(int index) {
if (index > books.length - 1)
throw new RuntimeException("index out of array size!");
return books[index];
}
public int size() {
return books.length;
}
}
? 測(cè)試類
public static void main(String[] args) {
BookArray bookArray = new BookArray(4);
bookArray.addBook("java編程思想");
bookArray.addBook("java核心技術(shù)");
bookArray.addBook("設(shè)計(jì)模式之禪");
bookArray.addBook("Spring實(shí)戰(zhàn)");
Iterator<String> iterator = bookArray.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
? 輸出
java編程思想
java核心技術(shù)
設(shè)計(jì)模式之禪
Spring實(shí)戰(zhàn)