迭代器模式
模式動機
乙個聚合物件,如乙個列表(list)或者乙個集合(set),應該提供一種方法來讓別人可以訪問它的元素,而又不需要暴露它的內部結構。
針對不同的需要,可能還要以不同的方式遍歷整個聚合物件,但是我們並不希望在聚合物件的抽象層介面中充斥著各種不同遍歷的操作。
怎樣遍歷乙個聚合物件,又不需要了解聚合物件的內部結構,還能夠提供多種不同的遍歷方式,這就是迭代器模式所要解決的問題。
模式動機
在迭代器模式中,提供乙個外部的迭代器來對聚合物件進行訪問和遍歷,迭代器定義了乙個訪問該聚合元素的介面,並且可以跟蹤當前遍歷的元素,了解哪些元素已經遍歷過而哪些沒有。
有了迭代器模式,我們會發現對乙個複雜的聚合物件的操作會變得如此簡單。
模式定義
迭代器模式(iterator pattern) :提供一種方法來訪問聚合物件,而不用暴露這個物件的內部表示,其別名為游標(cursor)。迭代器模式是一種物件行為型模式。
模式分析
聚合是乙個管理和組織資料物件的資料結構。
聚合物件主要擁有兩個職責:一是儲存內部資料;二是遍歷內部資料。
儲存資料是聚合物件最基本的職責。
將遍歷聚合物件中資料的行為提取出來,封裝到乙個迭代器中,通過專門的迭代器來遍歷聚合物件的內部資料,這就是迭代器模式的本質。迭代器模式是「單一職責原則」的完美體現。
在迭代器模式中應用了工廠方法模式,聚合類充當工廠類,而迭代器充當產品類,由於定義了抽象層,系統的擴充套件性很好,在客戶端可以針對抽象聚合類和抽象迭代器進行程式設計。
由於很多程式語言的類庫都已經實現了迭代器模式,因此在實際使用中我們很少自定義迭代器,只需要直接使用j**a、c#等語言中已定義好的迭代器即可,迭代器已經成為我們操作聚合物件的基本工具之一。
模式優缺點
迭代器模式的優點
它支援以不同的方式遍歷乙個聚合物件。
迭代器簡化了聚合類。
在同乙個聚合上可以有多個遍歷。
在迭代器模式中,增加新的聚合類和迭代器類都很方便,無須修改原有**,滿足「開閉原則」的要求。
迭代器模式的缺點
由於迭代器模式將儲存資料和遍歷資料的職責分離,增加新的聚合類需要對應增加新的迭代器類,類的個數成對增加,這在一定程度上增加了系統的複雜性。
模式適用環境
在以下情況下可以使用迭代器模式:
訪問乙個聚合物件的內容而無須暴露它的內部表示。
需要為聚合物件提供多種遍歷方式。
為遍歷不同的聚合結構提供乙個統一的介面。
12 10每日部落格
今天記錄一下我在使用layui元件中的 的時候遇到的問題,就是如何將mysql讀取到的資料顯示在 元件中的url指向的就可以是後台的servlet,然後servlet向前臺傳遞的是乙個json資料,並且要按照官網中的案例進行返回,不然前台的介面無法載入資料並且會提示介面異常。這裡的json是 net...
12 9每日部落格
首先給資料集名稱那一列 新增點選事件 然後呼叫乙個js方法,這個方法中包含layui元件中的彈出視窗的方法 function showthisdatatab name,size 然後我的思路是將這個資料集的名稱或者id傳遞給要開啟的那個html網頁,在那個網頁中在呼叫乙個資料 請求後台並得到資料庫的...
11 29每日部落格
mapreduce例項 reduce端join 在reudce端進行join連線是mapreduce框架進行表之間join操作最為常見的模式。1.reduce端join實現原理 1 map端的主要工作,為來自不同表 檔案 的key value對打標籤以區別不同 的記錄。然後用連線字段作為key,其餘...