第九個模式:迭代器與組合模式java
9.1問題引入:編程
我要須要建立一個對象,將它稱爲迭代器(Iterator),利用它來封裝「遍歷集合內的每一個對象的過程」。想讓咱們在ArrayList上試試:數組
將它也在數組上試試:設計
9.2會見迭代器模式3d
關於迭代器模式,咱們須要知道的就是它依賴於一個名爲迭代器的接口。一旦咱們有了這個接口,就能夠爲各類對象集合實現迭代器:數組、散列表、列表····若是咱們想要爲數組實現迭代器,以便使用在DinnerMenu中,看起來就像這樣:對象
看看初版的設計:blog
9.3作一些改良接口
咱們使用Java的Iterator接口,這會帶來不少的好處。get
首先看看java.util.Iterator接口:it
煎餅屋菜單和餐廳菜單的類,都實現了Menu接口,女招待能夠利用接口(而不是具體類)引用每個菜單對象。這樣,經過「針對接口編程,而不針對實現編程」,咱們就能夠減小女招待和具體累之間的依賴。
這個新的菜單接口有一個方法,createIterator()。此方法是由煎餅屋菜單和餐廳菜單實現的。每一個菜單類都必須提供適當的具體迭代器。
如今引入迭代器模式:提供了一種方法順序訪問了聚合對象中的各個元素,而又不暴露其內部的表示。
下面是迭代器模式的類圖:
9.4組合模式的引入
組合模式:容許你將對象組合成樹形結構來表示「總體/部分」層次結構。組合能讓客戶以一致的方式處理個別對象以及對象組合。
組合模式的類圖以下: