図イテレータクラスモデル
図クラスで説明
名前 | 説明 |
---|---|
集計 | 収集インタフェースは、メソッド・イテレータが提供され |
イテレータ | イテレータインターフェースは、反復操作を提供します |
本棚 | 本棚クラス |
本 | Bookクラス |
BookShelfIterator | イテレータクラスの本棚 |
反復モードコード
//集合接口
public interface Aggregate {
//生成迭代器的方法
public abstract Iterator iterator();
}
//迭代器接口
public interface Iterator {
public abstract boolean hasNext();
public abstract Object next();
}
//书架类
public class BookShelf implements Aggregate {
private Book[] books;
private int last = 0;
public BookShelf(int maxSize) {
this.books = new Book[maxSize];
}
public Book getBookAt(int index) {
return this.books[index];
}
public void appendBook(Book book) {
this.books[last] = book;
last++;
}
public int getLength() {
return last;
}
//获得BookShelf迭代器
public Iterator iterator() {
return new BookShelfIterator(this);
}
}
//书类
public class Book {
private String name;
public Book(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//书架迭代器类
public class BookShelfIterator implements Iterator {
private BookShelf bookShelf;
private int index;
public BookShelfIterator(BookShelf bookShelf) {
this.bookShelf = bookShelf;
this.index = 0;
}
public boolean hasNext() {
if (index < bookShelf.getLength()) {
return true;
} else {
return false;
}
}
public Object next() {
Book book = bookShelf.getBookAt(index);
index++;
return book;
}
}
//测试方法
public static void main(String[] args) {
BookShelf bookShelf = new BookShelf(4);
bookShelf.appendBook(new Book("西游记"));
bookShelf.appendBook(new Book("红楼梦"));
bookShelf.appendBook(new Book("水浒传"));
bookShelf.appendBook(new Book("三国演义"));
Iterator iterator = bookShelf.iterator();
while (iterator.hasNext()) {
Book book = (Book)iterator.next();
System.out.println(book.getName());
}
}
説明
本棚は、の「ツールセットを処理する」ブックのセット、等価集約インタフェースツールキットに対応し、本棚は、統合インターフェースを達成ハンドリングツール内に設置ツールボックスから除去することができます。
イテレータトラバーサルは、ツールのコレクションである、BookShelfIterator Iteratorインターフェイスを実装するには、専門を通じて変更コレクションをループする能力を持っている、特別なトラバース本棚のツールになります。
このように、我々は中に本棚から本棚を横断するためにそれを使用し、ブックコレクショントラバーサルツールBookShelfIteratorを達成することができます。
理由
それはコレクションをするので、forループライン、なぜべきで、このようなトラブルに直接書き込みませんか?
ので:コレクションは配列にすることができ、それはベクターであり得る、またリストすることができ、各トラバーサル方法は同じではありません。あなたがリストに配列を使用する場合は、コードのセット全体を書き直さなければなりませんでした。反復モードを使用した後、唯一の特定の反復法を変更することによって実現することができます。
考え
分離の一般的および具体的な方法。
そのアセンブリは、クラスが多重化されているように容易であるので、クラス間の結合を弱めます。
特定のクラスのプログラム、好ましくは抽象クラスとインタフェースを使用を使用しないようにしてください。
端的に言えば、いくつかの抽象的...イェジンハオの変更を変更するにはあまりにも具体的に書かれたコードを記述しないでください。