設(shè)計模式:迭代器模式
什么是迭代器模式?
迭代器模式(英文:Iterator Pattern),提供一種方法順序訪問一個容器對象的各個元素,而又無需暴露該對象的內(nèi)部表示。
一句話歸納
流水線上坐一天,每個包裹掃一遍。
代碼示例
java從1.2的版本中開始,就新增了一個java.util.Iterator<E>的接口,并且把Iterator應(yīng)用到Collection接口中。在15的版本中引入了一個java.lang.Iterable<T>接口,有很多容器接口實現(xiàn)它,比如:List<E>、Set<E>、TreeSet<E>、Queue<E>等等,又有多少個容器類實現(xiàn)它,比如:ArrayList<E>、ArrayBlockingQueue<E>、CopyOnWriteArrayList<E>等等。迭代器模式已經(jīng)融入到j(luò)ava當中了,讓我們可以使用的如此輕松、方便。

在程序設(shè)計中,經(jīng)常要訪問一個聚合對象中的各個元素,如“數(shù)據(jù)結(jié)構(gòu)”中的鏈表遍歷,通常的做法是將鏈表的創(chuàng)建和遍歷都放在同一個類中,但這種方式不利于程序的擴展,如果要更換遍歷方法就必須修改程序源代碼,這違背了 “開閉原則”。既然將遍歷方法封裝在聚合類中不可取,那么聚合類中不提供遍歷方法,將遍歷方法由用戶自己實現(xiàn)是否可行呢?答案是同樣不可取,因為會存在兩個缺點:暴露了聚合類的內(nèi)部表示,使其數(shù)據(jù)不安全;增加了客戶的負擔。“迭代器模式”能較好地克服以上缺點,它在客戶訪問類與聚合類之間插入一個迭代器,這分離了聚合對象與其遍歷行為,對客戶也隱藏了其內(nèi)部細節(jié),且滿足“單一職責原則”和“開閉原則”.
寫在最后
好兄弟可以點贊并關(guān)注我的公眾號“javaAnswer”,全部都是干貨。