美文网首页
Iterator模式

Iterator模式

作者: 涅槃快乐是金 | 来源:发表于2020-03-28 16:51 被阅读0次

    将(Book)放置到书架(BookShelf)中,并将书名按顺序显示

    接口:

    import Book from "./Book";
    //Aggregate接口是所要遍历的集合的接口
    export interface Aggregate {
        bookIterator: BookIterator;
    }
    //Iterator接口,用于遍历集合中的元素
    export interface BookIterator {
        hasNext(): boolean;//是否有下一个
        next(): Book;//获取下一个元素
    }
    

    Book类:

    /**
     * class Book
     */
    export default class Book {
        private name: string;
        /**
         * Book
         */
        constructor(name: string) {
            this.name = name;
        }
        public getName(): string {
            return this.name
        }
    }
    

    BookShelf类:

    import Book from "./Book";
    import { BookIterator } from "./Aggregate";
    import BookShelfIterator from "./BookShelfIterator";
    export default class BookShelf {
        private books: Array<Book>;
        private last: number = 0;
        constructor(maxsize: number) {
            this.books = new Array<Book>(maxsize);
        }
        /**
         * appendBook
         */
        public appendBook(book: Book): void {
            this.books[this.last] = book;
            this.last++;
        }
        /**
         * getBookAt
         */
        public getBookAt(index: number): Book {
            return this.books[index]
        }
        /**
         * getLength
         */
        public getLength(): number {
            return this.last;
        }
    
        /**
         * name
         */
        public bookIterator(): BookIterator {
            return new BookShelfIterator(this);
        }
    }
    

    BookShelfIterator类

     import BookShelf from "./BookShelf";
    import Book from "./Book";
    import { BookIterator } from "./Aggregate";
    export default class BookShelfIterator implements BookIterator {
        private bookShelf: BookShelf;
        private index: number;
        constructor(bookShelf: BookShelf) {
            this.bookShelf = bookShelf;
            this.index = 0;
        }
    
        /**
         * hasNext
         */
        public hasNext(): boolean {
            if (this.index < this.bookShelf.getLength()) {
                return true;
            } else {
                return false;
            }
        }
        /**
         * next
         */
        public next(): Book {
            const book = this.bookShelf.getBookAt(this.index);
            this.index++;
            return book;
        }
    }
    

    index入口

    import BookShelf from "./BookShelf";
    import Book from "./Book";
    
    let bookShelf = new BookShelf(4);
    bookShelf.appendBook(new Book("test1"));
    bookShelf.appendBook(new Book("test2"));
    bookShelf.appendBook(new Book("test3"));
    bookShelf.appendBook(new Book("test4"));
    const it = bookShelf.bookIterator();
    while (it.hasNext()) {
        const book = it.next();
        console.log(book.getName());
    }
    

    相关文章

      网友评论

          本文标题:Iterator模式

          本文链接:https://www.haomeiwen.com/subject/jnksuhtx.html