第一章 图解设计模式 Iterator模式

第一章 图解设计模式 Iterator模式

目录

第一章 图解设计模式 Iterator模式

简介

程序示例

Iterator模式中的登场角色

Iterator(迭代器)

ConcreteIterator(具体的迭代器)

Aggregate(集合)

ConcreteAggregate(具体的集合)

扩展思路的要点

相关的设计模式

Visitor模式

Composite模式

Factory Method模式


简介

Iterator模式,一个一个的遍历。

for(int i = 0;i

将这里的循环变量i的作用抽象化、通用化形成的模式,在设计模式中称为Iterator模式。

Iterator模式用于在数据集合中按照顺序遍历集合。

Iterator模式又称为“迭代器”模式。

程序示例

Aggregate接口

Aggregate接口是所要遍历的集合的接口。实现了该接口的类将成为一个可以保存多个

元素的集合,就像数组一样。Aggregate有“使聚集”,“集合”的意思。

public interface Aggregate{
     public abstract Iterator iterator(); 
}

Iterator接口

public interface Iterator{ 
        public abstract boolena hasNext(); 
        public abstract Object next(); 
}

Book类(在该场景中,Book为集合中的对象,被遍历获取的对象)

public class Book{ 
    private String name; 
    public Book(String name){ 
        this.name = name; 
    }
 
    public String getName(){ 
        return name; 
    } 
}

BookShelf类(在该场景中,BookShelf为具体的集合接口的实现类,为Book的载体)

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){ 
        this.books[last] = book; 
        last++; 
    } 
    
    public int getLength(){ 
        return last; 
    } 
    
    public Iterator iterator(){ 
        return new BookShelfIterator(this); 
    } 
}

BookShelfIterator类(用于遍历BookShelf的迭代器实现类)

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; 
        } 
}

Iterator模式中的登场角色

Iterator(迭代器)

        该角色负责定义按顺序逐个遍历元素的接口(API)。

        定义了hasNext和next两个方法。

        hasNext方法用于判断是否存在下一个元素,next方法用于获取该元素。

ConcreteIterator(具体的迭代器)

        该角色负责实现Iterator角色所定义的接口(API)。

        该角色中包含了遍历集合所必须的信息。

        包含集合对象以及指向集合对象中元素的下标index字段。

Aggregate(集合)

        该角色负责定义创建Iterator角色的接口(API)。

        定义了iterator方法。

ConcreteAggregate(具体的集合)

该角色负责实现Aggregate角色所定义的接口(API)。

它会创建出具体的Iterator角色,即ConcreteIterator橘色。

扩展思路的要点

不管实现如何变化,都可以使用Iterator

难以理解抽象类和接口(不要只使用具体类来编程,要优先使用抽象类和接口来编程)。

Aggregate和Iterator的对应

容易弄错“下一个”

        next方法:返回当前元素,并指向下一个元素

还容易弄错最后一个

        hasNext方法:确认接下来是否可以调用next方法

多个Iterator,可以针对一个ConcreteAggregate角色编写多个ConcreteIterator角色

迭代器的种类多种多样

        从最后开始向前遍历

        既可以从前向后遍历,也可以从后向前遍历(既有next方法,也有previous方法)

        指定下标进行“跳跃式”遍历

相关的设计模式

Visitor模式

        Iterator模式是从集合中一个一个取出元素进行遍历,但并没有在Iterator接口中声明对取出的元素进行何种处理。

        Visitor模式则是在遍历元素集合的过程中,对元素进行相同的处理。

Composite模式

        Composite模式是具有递归结构的模式,在其中使用Iterator模式比较困难。

Factory Method模式

        在iterator方法中生成Iterator的实例可能会使用Factory Method模式。

你可能感兴趣的:(设计模式,迭代器模式,java,设计模式)