1. 程式人生 > >圖解設計模式-Iterator模式

圖解設計模式-Iterator模式

[] 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(); } @Override
public 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模式