圖解設計模式-Iterator模式
阿新 • • 發佈:2018-08-28
[] align 類集 getname ole book lse pan interface 使用抽象類和接口,弱化類之間的耦合,使類可以更容易組件化
不使用具體類編程,要優先使用抽象類和接口編程
角色劃分:
Iterator叠代器接口,定義遍歷元素的接口,hasNext判斷是否有下一個、next獲得下一個值
ConcreteIterator:叠代器具體的實現類,實現了hasNext、next兩個方法,需要根據具體的被叠代對象進行自定。
Aggregate集合接口,包含了獲得Iterator叠代器的方法
ConcreteAggregate集合的具體實現類,實現了了獲得Iterator叠代器的方法
- 定義被編列的類
public class Book { private定義遍歷接口String name; public Book(String name){ this.name=name; } public String getName() { return name; } }
public interface Iterator { public abstract boolean hasNext(); public abstract Object next(); }
定義書架類集合
import java.util.ArrayList; import java.util.List;public class BookShelf extends Aggregate { private List<Book> bookList = new ArrayList<>(); public void addBook(Book book) { bookList.add(book); } public Book getIndex(int i) { return bookList.get(i); } public int getLength() { return bookList.size(); } @Overridepublic Iterator iterator() { return new BookShelfIterator(this); } }
定義書架類對應的書架遍歷類
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(bookShelf.getLength()>index) { return true; } return false; } @Override public Object next() { Book book = bookShelf.getIndex(index); index++; return book; } }
定義測試類
public class Main { public static void main(String[] args){ BookShelf bookShelf = new BookShelf(); bookShelf.addBook(new Book("數學")); bookShelf.addBook(new Book("物理")); bookShelf.addBook(new Book("化學")); Iterator iterator = bookShelf.iterator(); for(;iterator.hasNext();) { Book book = (Book)iterator.next(); System.out.println(book.getName()); } } }
總結:被遍歷的集合類(BookShelf)與遍歷類(BookShelfIterator)分開定義,進行解耦,方便擴展。
圖解設計模式-Iterator模式