小白如何免費做網(wǎng)站阿里巴巴國際站關鍵詞推廣
目錄
一、前言
二、迭代器模式
三、總結(jié)
一、前言
? ? ? ? 迭代器模式(Iterator?Pattern)是一種行為型設計模式,提供一種方法順序訪問一個聚合對象中各個元素,而又不暴露該對象的內(nèi)部表示??偟膩碚f就是分離了集合對象的遍歷行為,抽象出一個迭代器類來負責,這樣既可以做到不暴露集合的內(nèi)部結(jié)構(gòu),又可以讓外部代碼透明地訪問集合內(nèi)部的數(shù)據(jù)。
? ? ? ? 迭代器模式由以下角色組成:
Iterator(抽象迭代器):
定義了遍歷聚合對象所需的方法,包括hashNext()和next()方法等,用于遍歷聚合對象中的元素
Concrete Iterator(具體迭代器):
它是實現(xiàn)迭代器接口的具體實現(xiàn)類,負責具體的遍歷邏輯。它保存了當前遍歷的位置信息,并可以根據(jù)需要向前或向后遍歷集合元素
Aggregate(抽象聚合器):
一般是一個接口,提供一個iterator()方法,例如java中的Collection接口,List接口,Set接口等。
ConcreteAggregate(具體聚合器):
就是抽象容器的具體實現(xiàn)類,比如List接口的有序列表實現(xiàn)ArrayList,List接口的鏈表實現(xiàn)LinkList,Set接口的哈希列表的實現(xiàn)HashSet等。
? ? ? ? 整個迭代器模式的結(jié)構(gòu)圖:
二、迭代器模式
? ? ? ? 迭代器實際上在現(xiàn)有的語言中基本都有實現(xiàn),比如java里面的foreach,如果使用到了foreach,查看.class文件,可以發(fā)現(xiàn)編譯后的實際是使用Iterator進行的迭代遍歷:
? ? ? ? 這里就簡單模擬List<String>的迭代器。
? ? ? ? 首先創(chuàng)建類Iterator:
public interface Iterator<T> {T next();boolean hasNext();
}
? ? ? ? 具體的實現(xiàn)類ConcreteIterator:
public class ConcreteIterator<T> implements Iterator{private List<T> aggregate;private int index;public ConcreteIterator(List<T> aggregate) {this.aggregate = aggregate;}@Overridepublic T next() {return aggregate.get(index++);}@Overridepublic boolean hasNext() {return index < aggregate.size() ? true : false;}
}
? ? ? ? 再創(chuàng)建Aggregate類:
public interface Aggregate<T> {void add(T str);Iterator<T> getIterator();
}
? ? ? ? 具體的實現(xiàn)ConcreteAggregate類:
public class ConcreteAggregate<T> implements Aggregate{private List<T> aggregate;public ConcreteAggregate() {this.aggregate = new ArrayList<>();}@Overridepublic void add(Object item) {this.aggregate.add((T) item);}@Overridepublic Iterator<T> getIterator() {return new ConcreteIterator(this.aggregate);}
}
? ? ? ? 客戶端調(diào)用:
public class Client {public static void main(String[] args) {ConcreteAggregate aggregate = new ConcreteAggregate();aggregate.add("1");aggregate.add("2");Iterator iterator = aggregate.getIterator();while (iterator.hasNext()){Object s = iterator.next();System.out.println(s);}}
}
? ? ? ? 運行結(jié)果:
三、總結(jié)
? ? ? ? 優(yōu)點與缺點:
優(yōu)點:
1、簡化遍歷:迭代器模式提供了一種統(tǒng)一的方法來遍歷各種聚合對象,客戶端代碼不需要了解聚合對象的具體實現(xiàn)
2、解耦遍歷算法和集合結(jié)構(gòu)通過引入迭代器,集合對象和遍歷算法分離,集合對象不需要實現(xiàn)遍歷邏輯,這提高了代碼的模塊化和復用性
3、多種遍歷方式可以為同一個集合提供不同的迭代器,實現(xiàn)多種遍歷方式(如正向遍歷、反向遍歷)
4、一致接口所有的集合都可以提供相同的迭代器接口,客戶端可以以相同的方式遍歷不同類型的集合,提升了代碼的靈活性和可維護性
5、并發(fā)支持某些迭代器可以支持并發(fā)遍歷,允許在多線程環(huán)境中安全地遍歷集合
缺點:
1、開銷增加由于引入了迭代器對象,會增加額外的類和對象,從而增加了系統(tǒng)的復雜性和內(nèi)存開銷。
2、外部迭代器復雜性在某些情況下,使用外部迭代器(顯式控制迭代過程)會使代碼變得復雜,特別是在需要嵌套迭代或管理迭代狀態(tài)時。
3、對變化敏感如果在迭代過程中集合結(jié)構(gòu)發(fā)生變化(如增刪元素),需要處理并發(fā)修改的問題,可能會引入額外的同步機制和復雜性。
? ? ? ? 應用場景:
1、遍歷集合對象:需要遍歷不同類型的集合對象(如數(shù)組、鏈表、樹、圖等)時,使用迭代器模式可以提供統(tǒng)一的遍歷方式。
2、隱藏集合內(nèi)部實現(xiàn):當不希望客戶端了解或依賴集合對象的內(nèi)部結(jié)構(gòu)時,可以使用迭代器模式隱藏內(nèi)部實現(xiàn)細節(jié)。
3、多種遍歷需求:需要對同一集合對象進行多種不同方式的遍歷時,可以定義多個不同類型的迭代器來滿足需求。
4、復雜聚合對象:對于一些復雜的聚合對象,如組合模式(Composite Pattern)中的樹形結(jié)構(gòu),迭代器模式可以提供一種簡單的遍歷方法。