• 设计模式(1) -- 迭代模式


        Iterator(迭代器)接口在Java中可以用来嵌入对象当中来实现具体应用,在设计模式中强调的是"低耦合","高复用","不要用具体代码来编程,要优先使用接口和抽象类来编程。"

        这个实例当中不管BookShelf如何变化,只要BookShelf类可以返回重写了Iterator方法(hasNext,Next)的BookShelfIterator类,无论改成数组还是集合测设代码都可以正常运转,这便是组件化,当一个组件发生改变时,可以不用修改其他组件或者很小改动。

        实例:

          集合接口:

    package com.book;
    
    import java.util.Iterator;
    
    public interface Aggregate {
            public abstract Iterator iterator();
    }

           书类:

        package com.book;
    
    public class Book {
            private    String BookName;
    
            public String getBookName() {
                return BookName;
            }
    
            public void setBookName(String bookName) {
                BookName = bookName;
            }
            
            
    }

      

        书架类:

    package com.book;
    
    import java.util.Iterator;
    //书架类
    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 Books[index];
        }
        //添加图书
        public void appendBook(Book book) {
            Books[last] = book;
            last++;
        }
        //获取长度
        public int getLength() {
            return last;
        }
        
        
        @Override
        public Iterator iterator() {
            // TODO Auto-generated method stub
            return new BookSelfIterator(this);
        }
        
            
    }

        书架迭代:

    package com.book;
    
    import java.util.Iterator;
    
    public class BookSelfIterator implements Iterator{
        //定义一个书架
        private BookShelf bookSelf;
        //定义下标
        private int index;
        
        //初始化
        public BookSelfIterator(BookShelf bookShelf) {
            this.bookSelf = bookShelf;
            index = 0;
        }
        
        
        @Override
        public boolean hasNext() {
            // TODO Auto-generated method stub
            if(index<bookSelf.getLength()) {
                return true;
            }else {
            return false;
            }
        }
    
        @Override
        public Object next() {
            // TODO Auto-generated method stub
            Book book = bookSelf.getBookAt(index);
            index++;
            return book;
        }
    
    }

       测试:

    package com.book;
    
    public class TextMain {
        public static void main(String[] args) {
            BookShelf bookShelf = new BookShelf(6);
            Book book_1 = new Book();
            Book book_2 = new Book();
            Book book_3 = new Book();
            book_1.setBookName("图解设计模式");
            book_2.setBookName("鸟歌的Linux私房菜");
            book_3.setBookName("算法导论");
            bookShelf.appendBook(book_1);
            bookShelf.appendBook(book_2);
            bookShelf.appendBook(book_3);;
            BookSelfIterator bookShelfIterator  = new BookSelfIterator(bookShelf);
            while(bookShelfIterator.hasNext()) {
                Book book = (Book) bookShelfIterator.next();
                System.out.println(book.getBookName());
            }
        }
    }

  • 相关阅读:
    Kinect关于PlayerIndex和SkeletonId之间的关系。
    记一次“应用程序之间的通信”过程(1/2)
    C# p-Inovke C++动态链接库
    我写了本破书-swift语言实战晋级
    swift语言实战晋级-第9章 游戏实战-跑酷熊猫-9-10 移除平台与视差滚动
    swift语言实战晋级-第9章 游戏实战-跑酷熊猫-7-8 移动平台的算法
    Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-5-6 踩踏平台是怎么炼成的
    Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-4 熊猫的跳和打滚
    Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-3 显示一个动态的熊猫
    Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-2 创建熊猫类
  • 原文地址:https://www.cnblogs.com/yangchaojie/p/8146724.html
Copyright © 2020-2023  润新知