迭代器模式

前言

迭代器模式也稱遊標模式,在絕大多數編程語言中,迭代器已經成爲一個基礎的類庫,直接用來遍歷集合對象。關鍵思想是將訪問和遍歷的職責從集合對象中分離出來,放入標準的協議對象中。算法

目錄

1、定義

它提供一種方法訪問一個容器對象中各個元素,而又不需暴露該對象的內部細節。編程

2、模式原理分析

模板代碼markdown

//1.抽象迭代器
public interface Iterator{
    //遍歷到下一個元素
    public Object next();
    //是否已經遍歷到尾部
    public boolean hasNext();
    //刪除當前指向的元素
    public boolean remove();
}
//2.具體迭代器
public class ConcreteIterator implements Iterator{
    private Vector vector = new Vector();
    //定義當前遊標
    public int cursor = 0;
    public ConcreteIterator(Vector _vector){
        this.vector = _vector;
    }
    //判斷是否到達尾部
    public boolean hasNext(){
        if(this.cursor == this.vector.size()){
            return false;
        }else{
            return true;
        }
    }
    //返回下一個元素
    public Object next(){
        Object result = null;
        if(this.hasNext()){
            result = this.vector.get(this.cursor++);
        }else{
            result = null;
        }
        return result;
    }
    //刪除當前元素
    public boolean remove(){
        this.vector.remove(this.cursor);
        return true;
    }
}
//3.抽象容器
public interface Aggregate{
    //是容器必然有元素的增長
    public void add(Object object);
    //減小元素
    public void remove(Object object);
    //由迭代器來遍歷全部的元素
    public Iterator iterator();
}
//4.具體容器
public class ConcreteAggregate implements Aggregate{
    //容納對象的容器
    private Vector vector = new Vector();
    //增長一個元素
    public void add(Object object){
        this.vector.add(object);
    }
    //返回迭代器對象
    public Iterator iterator(){
        return new ConcreteIterator(this.vector);
    }
    //刪除元素
    public void remove(Object object){
        this.vector.remvoe(object);
    }
}
//5.場景類
public class Client{
    public static void main(String[] args){
        //容器
        Aggregate agg = new ConcreteAggregate();
        //添加數據
        agg.add("abc");
        agg.add("aaa");
        agg.add("1234");
        //遍歷
        Iterator iterator = agg.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}
複製代碼

3、使用場景

  • 對客戶端隱藏其遍歷算法複雜性時編程語言

  • 須要簡化重複的循環遍歷邏輯時this

4、優勢

  • 知足單一職責原則,將遍歷算法代碼統一抽取封裝爲獨立的類,職責僅僅是遍歷數據spa

  • 知足開閉原則,當須要對新的對象集合進行擴展時,只須要新增具體的對象迭代器和具體的集合類就能夠code

  • 避免了直接使用for循環的重複代碼問題orm

5、缺點

  • 增長了子類數量對象

  • 增長了系統複雜性rem

相關文章
相關標籤/搜索