形象例子:
我愛上了mary,不顧一切的向她求婚。
mary:「想要我跟你結婚,得答應我的條件」
我:「什麼條件我都答應,你說吧」
mary:「我看上了那個一克拉的鑽石」
我:「我買,我買,還有嗎?」
mary:「我看上了湖邊的那棟別墅」
我:「我買,我買,還有嗎?」
mary:「你的小弟弟必須要有50cm長」
我腦袋嗡的一聲,坐在椅子上,一咬牙:「我剪,我剪,還有嗎?」
……迭代子模式:
迭代子模式可以順序訪問乙個聚集中的元素而不必暴露聚集的內部表象。多個物件聚在一起形成的總體稱之為聚集,聚集物件是能夠包容一組物件的
容器物件。迭代子模式將迭代邏輯封裝到乙個獨立的子物件中,從而與聚集本身隔開。迭代子模式簡化了聚集的介面。每乙個聚集物件都可以有乙個或乙個以上的迭代子物件,每乙個迭代子的迭代狀態可以是彼此獨立的。迭代演算法可以獨立於聚集角色變化。
作用:提供一種方法順序訪問乙個聚合物件中各個元素,,而又不需暴露該物件的內部表示.
uml結構圖:
解析:iterator
幾乎是大部分人在初學c++的時候就無意之中接觸到的第一種設計模式,因為在stl之中,所有的容器類都有與之相關的迭代器.以前初學stl的時候,時常
在看到講述迭代器作用的時候是這麼說的:提供一種方式,使得演算法和容器可以獨立的變化,而且在訪問容器物件的時候不必暴露容器的內部細節,具體是怎麼做到
這一點的呢?在stl的實現中,所有的迭代器(iterator)都必須遵照一套規範,這套規範裡面定義了幾種型別的名稱,比如物件的名稱,指向物件的指
針的名稱,指向物件的引用的名稱....等等,當新生成乙個容器的時候與之對應的iterator都要遵守這個規範裡面所定義的名稱,這樣在外部看來雖然
裡面的實現細節不一樣,但是作用(也就是對外的表象)都是一樣的,通過某個名稱可以得到容器包含的物件,通過某個名稱可以得到容器包含的物件的指標等等的.而且,採用這個模式把訪問容器的重任都交給了具體的iterator類中.於是,在使用iterator來訪問容器物件的演算法不需要知道需要處理的是
什麼容器,只需要遵守事先約定好的iterator的規範就可以了;而對於各個容器類而言,不管內部的事先如何,是樹還是鍊錶還是陣列,只需要對外的介面
也遵守iterator的標準,這樣演算法(iterator的使用者)和容器(iterator的提供者)就能很好的進行合作,而且不必關心對方是如何實現的,簡而言之,iterator就是演算法和容器之間的一座橋梁.
在下面的實現中,抽象基類iterator可以看做是前面提到的
iterator的規範,它提供了所有iterator需要遵守的規範也就是對外的介面,而它的派生類concreateiterator則是
concreateaggregate容器的迭代器,它遵照這個規範對容器進行迭代和訪問操作.
設計模式 迭代器模式(Iterator)
顧名思義,迭代器模式就是順序訪問集合中的物件,一般來說,集合中非常常見,如果對集合模擬較熟悉的話,理解本模式會十分輕鬆。這句話包含兩層意思 一是需要遍歷的物件,即聚集物件,二是迭代器物件,用於對聚集物件進行遍歷訪問。我們看下關係圖 這個思路和我們常用的一模一樣,mycollection中定義了集合的...
設計模式 迭代器模式(Iterator)
迭代器 在各種語言中 都有封裝好的迭代器集合 比如c list 迭代器圖 舉例子電視和遙控器 電視如果沒有遙控器 需要去電視控制面板 乙個乙個的換台 有遙控器就可以 在遙控器裡直接按鍵 用來很方便 很解耦 iterator 乙個實體類 集合需要的物件 倆個介面 乙個是集合物件介面 包含建立操作集合方...
設計模式 Iterator 迭代器 模式
試想一下,我們在獲取乙個陣列中的元素時,一般會使用for迴圈語句遍歷陣列,i 的作用是讓 i 的值在每次迴圈後自增1,這樣就可以依次訪問陣列中的下乙個元素,也就實現了從頭至尾逐一遍歷陣列元素的功能。for int i 0 i arr.length i 將 i 的作用抽象化,通用化後形成的模式,就稱為...