迭代器模式(lterator Pattern)简介
定義
迭代器模式(lterator Pattern)又稱為游標(biāo)模式(Cursor Pattern),它提供一種順序訪問(wèn)集合或容器對(duì)象元素的方法,而又無(wú)須暴露集合內(nèi)部表示。迭代器模式可以為不同的容器提供一致的遍歷行為,而不用關(guān)心容器內(nèi)容元素組成結(jié)構(gòu),屬于行為型模式。
適用場(chǎng)景
我們把多個(gè)對(duì)象聚在一起形成的總體稱之為集合,集合對(duì)象是能夠包容一組對(duì)象的容器對(duì)象。不同的集合其內(nèi)部元素的聚合結(jié)構(gòu)可能不同,而迭代器模式屏蔽了內(nèi)部元素獲取細(xì)節(jié),為外部提供一致的元素訪問(wèn)行為,解耦了元素迭代與集合對(duì)象間的耦合,并且通過(guò)提供不同的迭代器,可以為同個(gè)集合對(duì)象提供不同順序的元素訪問(wèn)行為,擴(kuò)展了集合對(duì)象元素迭代功能,符合開(kāi)閉原則。迭代器模式適用于以下場(chǎng)景:
1、訪問(wèn)一個(gè)集合對(duì)象的內(nèi)容而無(wú)需暴露它的內(nèi)部表示;
2、為遍歷不同的集合結(jié)構(gòu)提供一個(gè)統(tǒng)一的訪問(wèn)接口。
代碼實(shí)現(xiàn)
//抽象迭代器 public interface Iterator<E> {E next();boolean hasNext(); } //抽象容器 public interface IAggregate<E> {boolean add(E element);boolean remove(E element);Iterator<E> iterator(); } //具體迭代器 public class ConcreteIterator<E> implements Iterator<E> {private List<E> list;private int cursor = 0;public ConcreteIterator(List<E> list) {this.list = list;}public E next() {return this.list.get(this.cursor ++);}public boolean hasNext() {return this.cursor < this.list.size();} } //具體容器 public class ConcreteAggregate<E> implements IAggregate<E> {private List<E> list = new ArrayList<E>();public boolean add(E element) {return this.list.add(element);}public boolean remove(E element) {return this.list.remove(element);}public Iterator<E> iterator() {return new ConcreteIterator<E>(this.list);} } public class Test {public static void main(String[] args) {//來(lái)一個(gè)容器對(duì)象IAggregate<String> aggregate = new ConcreteAggregate<String>();//添加元素aggregate.add("one");aggregate.add("two");aggregate.add("three");//獲取容器對(duì)象迭代器Iterator<String> iterator = aggregate.iterator();//遍歷while (iterator.hasNext()) {String element = iterator.next();System.out.println(element);}} }優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1、多態(tài)迭代:為不同的聚合結(jié)構(gòu)提供一致的遍歷接口,即一個(gè)迭代接口可以訪問(wèn)不同的集合對(duì)象;
2、簡(jiǎn)化集合對(duì)象接口:迭代器模式將集合對(duì)象本身應(yīng)該提供的元素迭代接口抽取到了迭代器中,使集合對(duì)象無(wú)須關(guān)心具體迭代行為;
3、元素迭代功能多樣化:每個(gè)集合對(duì)象都可以提供一個(gè)或多個(gè)不同的迭代器,使的同種元素聚合結(jié)構(gòu)可以有不同的迭代行為;
4、解耦迭代與集合:迭代器模式封裝了具體的迭代算法,迭代算法的變化,不會(huì)影響到集合對(duì)象的架構(gòu)。
缺點(diǎn):
對(duì)于比較簡(jiǎn)單的遍歷(像數(shù)組或者有序列表),使用迭代器方式遍歷較為繁瑣。
總結(jié)
以上是生活随笔為你收集整理的迭代器模式(lterator Pattern)简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: qt 设置背景图片、背景色步骤
- 下一篇: 北航超算运行matlab,北航学子在AS