设计模式示例-迭代器模式

来源:互联网 发布:无形资产软件升级费用 编辑:程序博客网 时间:2024/06/04 18:13
package iterator;/** * 聚合接口,实现该接口的类是聚合类 *  * @author  duchao * @version  [版本号, 2012-10-15] * @see  [相关类/方法] * @since  [产品/模块版本] */public interface Aggregate{    /**     * 返回该聚合类的迭代器     * @return     * @see [类、类#方法、类#成员]     */    public abstract Iterator iterator();}
/* * 文 件 名:  Iterator.java * 版    权:  Huawei Technologies Co., Ltd. Copyright YYYY-YYYY,  All rights reserved * 描    述:  <描述> * 修 改 人:  Administrator * 修改时间:  2012-10-15 * 跟踪单号:  <跟踪单号> * 修改单号:  <修改单号> * 修改内容:  <修改内容> */package iterator;/** * 执行递增、遍历的接口 *  * @author  duchao * @version  [版本号, 2012-10-15] * @see  [相关类/方法] * @since  [产品/模块版本] */public interface Iterator{    /**     * 检查是否还有下一个元素     * @return     * @see [类、类#方法、类#成员]     */    abstract public boolean hasNext();        /**     * 取得下一个元素     * @return     * @see [类、类#方法、类#成员]     */    abstract public Object next();}
package iterator;/** * 书籍类 *  * @author  duchao * @version  [版本号, 2012-10-15] * @see  [相关类/方法] * @since  [产品/模块版本] */public class Book{    private String name = "";        public Book(String name)    {        this.name = name;    }        public String getName()    {        return name;    }}

package iterator;import java.util.Vector;/** * 书架类,实现了Aggregate聚合接口,是一个聚合类 * 又实现了Iterator迭代器接口,自身即有迭代功能 *  * @author  duchao * @version  [版本号, 2012-10-16] * @see  [相关类/方法] * @since  [产品/模块版本] */public class BookShelf implements Aggregate{    private Vector<Book> books;    private int length;    private int last = 0;        public BookShelf(int capacity)    {        books = new Vector<Book>(capacity);        length = capacity;    }        /**     * 向书架上增加书籍     * @param book     * @return     * @see [类、类#方法、类#成员]     */    public boolean addBook(Book book)    {        books.addElement(book);        last++;        if (last > length)        {            length = last;        }        return true;    }        /** {@inheritDoc} */        @Override    public Iterator iterator()    {        return new BookShelfIterator();    }        /**     *      * 书架迭代器类,声明为内部类,如此BookShelf类可以不必对外暴露过多的接口     *      * @author  duchao     * @version  [版本号, 2012-10-16]     * @see  [相关类/方法]     * @since  [产品/模块版本]     */    private class BookShelfIterator implements Iterator    {        private int index = 0;                @Override        public boolean hasNext()        {            if (index < last)            {                return true;            }            return false;        }                @Override        public Object next()        {            Book book = books.get(index);            index++;            return book;        }            }}

package iterator;import java.util.LinkedList;import java.util.List;import java.util.Scanner;public class Maintest{        /** <一句话功能简述>     * <功能详细描述>     * @param args     * @see [类、类#方法、类#成员]     */    public static void main(String[] args)    {        int n;        System.out.println("请输入需要向书架中添加书籍的数量:");        Scanner scanner = new Scanner(System.in);        n = scanner.nextInt();        BookShelf bookShelf = new BookShelf(n);                for (int i = 0; i < n + 10; i++)        {            Book book = new Book("书籍" + i);            bookShelf.addBook(book);        }        Iterator iterator = bookShelf.iterator();        while (iterator.hasNext())        {            Book book = (Book)iterator.next();            System.out.println(book.getName());        }    }        public static void test()    {        long n;        System.out.println("请输入ArrayList中的元素个数:");        Scanner scanner = new Scanner(System.in);        n = scanner.nextLong();        long start = 0;        long stop = 0;        List<String> list = new LinkedList<String>();        for (int i = 0; i < n; i++)        {            list.add(String.valueOf(i));        }        System.out.println("ArrayList初始化完毕,大小为:" + n);        start = System.nanoTime();        for (int i = 0; i < list.size(); i++)        {            String item = list.get(i);            item = null;        }        stop = System.nanoTime();        System.out.println("使用For循环遍历ArrayList所有" + n + "个元素,所花费的时间为" + (stop - start) / 1000000.0 + "毫秒");                start = System.nanoTime();        for (String string : list)        {            string = null;        }        stop = System.nanoTime();        System.out.println("使用foreach遍历ArrayList所有" + n + "个元素,所花费的时间为" + (stop - start) / 1000000.0 + "毫秒");                java.util.Iterator<String> iterator = list.iterator();        start = System.nanoTime();        while (iterator.hasNext())        {            String item = iterator.next();            item = null;        }        stop = System.nanoTime();        System.out.println("使用迭代器遍历ArrayList所有" + n + "个元素,所花费的时间为" + (stop - start) / 1000000.0 + "毫秒");    }}