意圖:提供一種方法順序訪問乙個聚合物件中各個元素,而又不需要暴露物件的內部表示。
我想gof 的意圖這次說的很明白了,就是我想遍歷乙個聚合物件。但又隱藏內部實現。該怎麼辦呢?本模式主要
就是把遍歷演算法獨立出來,使它和聚合物件去耦合 。
為何使用?
在物件導向設計中,乙個難點就是辨認物件的職責。理想的狀態下,乙個類應該只有乙個單一的職責。職責分離可以
最大限度的去耦合,但是職責單一說起來容易,做起來難。具體到本模式,我們明顯可以看到,乙個聚合物件它提供了
兩個職責 一是組織管理資料物件,二是提供遍歷演算法。如果該遍歷演算法有變化,那麼我們就隔離變化 把它單獨提取
出來抽象為乙個迭代器,這就是本模式的本質。
角色:1) 迭代器角色(iterator):迭代器角色定義訪問和遍歷元素的介面。
2) 具體迭代器角色(concrete iterator):具體迭代器角色實現迭代器介面,並對聚合物件遍歷時跟綜當前位置。
3) 聚合角色(container):定義建立具體迭代器角色的介面。
4) 具體聚合角色(concrete container):具體聚合實現建立相應迭代器的介面,返回乙個具體迭代器的例項。
總結:1:為了實現對於不同的聚集物件,客戶端**不會變化,因此我們引入了多型迭代器。為了建立多型迭代器又用到了
factory method模式,為了使**不倚賴於具體的聚合物件,迭代器是由聚合物件建立的。
2:有些時候,遍歷演算法可能需要訪問聚合物件的私有變數,這時遍歷演算法也可以放在聚合物件(好處是不破壞
封 裝),在遍歷過程中迭代器物件儲存當前的迭代狀態,這一種迭代器我們稱為游標 。
3:本模式可能實現起來比較麻煩,需要考慮迭代器的健壯性。因為有些時候我們遍歷聚合物件時還會對該物件進行
加入刪除操作 。在使用中發現 微軟的 foreach 就不夠健壯。
為什麼要使用設計模式
最近在找工作,今天被問到了乙個壓根就沒思考過的問題 為什麼要使用設計模式?恩,估計我要是被錄用了,那應該不會是乙個普通的程式設計師了,多有內涵的問題啊!在一做專案就用ssh做架構的今天,我連在 需要使用設計模式都不知道,也就沒思考過為什麼要使用設計模式了。不過了,面試就是面試,面試的題目不管多刁鑽,...
為什麼使用工廠模式
非原創,只是搬運。位址 1.工廠模式並不僅僅是用來new出乙個類的物件的。簡單工廠確實如題主的描述所說,是乙個工廠對應乙個類的關係。假設有 包a和 包b,包b是 包a的呼叫者,a向b暴露介面inte cea。在a的內部結構中,實現了inte cea的有classa1,classa2,classa3,...
為什麼Iterator要先next再remove
在使用iterator的時候為什麼要先next再remove不然就會拋錯呢 org.junit.test public void testarraylist 看一下jdk的實現 private class itr implements iterator suppresswarnings unchec...