• 迭代器模式


    集合类中包含很多数据结构:数组、散列表、ArrayList等,这些集合类的迭代方法都不一样。为了隐藏迭代的具体实现 ,抽象集合类中引用抽象迭代器,具体的集合类引用具体的迭代类,在具体迭代类实现便利具体集合类的方法

    package iterator;

    import java.util.Iterator;

    /**
    * 抽象集合类,引用抽象迭代类
    */
    public interface Aggregate {
    public abstract Iterator createIterator();
    }
    package iterator;

    import java.util.Iterator;

    /**
    * 具体集合类
    */
    public class ArrayShelf implements Aggregate {
    Book[] books;
    int index = 0;

    public ArrayShelf(int maxium) {
    books = new Book[maxium];
    }

    public Book getBookAt(int index) {
    return books[index];
    }

    public void appendBook(Book newBook) {
    books[index++] = newBook;
    }

    public int getLength() {
    return index;
    }

    @Override
    public Iterator createIterator() {
    return new ArrayIterator(this);
    }
    }
    package iterator;

    import java.util.Iterator;

    /**
    * 具体迭代类,Iterator是抽象迭代类
    */
    public class ArrayIterator implements Iterator {
    private ArrayShelf bookShelf;
    private int index = 0;

    public ArrayIterator(ArrayShelf bookShelf) {
    this.bookShelf = bookShelf;
    index = 0;
    }

    @Override
    public boolean hasNext() {
    if (index < bookShelf.getLength()) {
    return true;
    } else {
    return false;
    }
    }

    @Override
    public Object next() {
    Book book = bookShelf.getBookAt(index++);
    return book;
    }
    }
    package iterator;

    import java.util.ArrayList;
    import java.util.Iterator;

    /**
    * Created by marcopan on 17/4/7.
    */
    public class ListIterator implements Iterator {
    ListShelf arrays = new ListShelf();
    int index = 0;

    public ListIterator(ListShelf arrays) {
    this.arrays = arrays;
    index = 0;
    }

    @Override
    public boolean hasNext() {
    return (index < arrays.getLength());
    }

    @Override
    public Object next() {
    return arrays.getBook(index++);
    }
    }
    package iterator;

    import java.util.Iterator;
    import java.util.List;
    import java.util.ArrayList;

    public class ListShelf implements Aggregate {
    List<Book> shelfList = new ArrayList<Book>();

    public ListShelf() {
    shelfList = new ArrayList();
    }

    public void append(Book book) {
    shelfList.add(book);
    }

    public Book getBook(int index) {
    return shelfList.get(index);
    }

    public int getLength() {
    return shelfList.size();
    }

    @Override
    public Iterator createIterator() {
    return new ListIterator(this);
    }
    }
    package iterator;

    import java.util.Iterator;

    /**
    * Created by marcopan on 17/4/7.
    */
    public class IteratorTest {
    public static void main(String[] args) {
    ArrayShelf shelf = new ArrayShelf(4);
    shelf.appendBook(new Book("a"));
    shelf.appendBook(new Book("b"));
    shelf.appendBook(new Book("c"));
    shelf.appendBook(new Book("d"));

    /*ListShelf list = new ListShelf();
    list.append(new Book("a"));
    list.append(new Book("b"));
    list.append(new Book("c"));
    list.append(new Book("d"));*/

    Iterator it = shelf.createIterator();
    while (it.hasNext()) {
    Book book = (Book)it.next();
    System.out.println(book.getName());
    }
    }
    }
  • 相关阅读:
    cuda thrust函数首次调用耗费时间比后续调用长原因
    poj2823/hdu3415
    hiho1515
    hiho147周
    hdu1864/2844/2159 背包基础题
    qt + opencv
    Matlab函数编译成dll供c调用
    无处不在的编程思想
    五步使用法——搞定XMLHttpRequest
    AJAX与传统Web开发比较
  • 原文地址:https://www.cnblogs.com/panning/p/6680291.html
Copyright © 2020-2023  润新知