另外做為迭代器,首先你要獲取資料(構造方法),你至少要有最小的執行單位,乙個是next()來獲取下乙個資料,那隨之而來就需要判斷下乙個是否存在,需要hasnext()方法,再加remove()方法。並且聚合物件要實現迭代器介面,這樣客戶端就可以針對介面程式設計,還要需要返回乙個迭代器方法,把聚合物件傳入進去。
看下定義,迭代器模式:提供一種方法順序訪問乙個聚合物件中的各個元素,而又不暴露其內部的表示。
方法就是next()和hasnext()方法。
這裡涉及乙個原則,乙個類應該只有乙個引起變化的原因。
}組合模式
想象一下這樣乙個場景,餐單,裡面有時不僅包含餐點,同時也包含其他餐單,而這餐單裡又包含了同樣的餐單。這是一種樹形結構(組合結構),使用這種結構,我們能把相同的操作應用在組合和個別物件中。
概念,組合物件中,有根(最上層的餐單元件),結點(選單元件),葉子(選單項)的概念。
看下定義:組合模式:允許你將物件組合成樹形結構來表現」整體/部分」層次結構,組合能讓客戶以一致的方式處理個別物件以及物件組合。
看類圖就明白了
通過葉子和結點同實現共同的介面來實現。在高層抽象類定義所需的方法。
這裡的難點是怎麼遍歷選單組下面所有的元素。
兩種方法:
1.通過遞迴,共同實現同乙個方法,不論是葉子還是結點,通過呼叫自身來遍歷所有。
2.通過實現外部迭代器,通過對迭代器進行操作來代替對鍊錶的直接操作。
**:
public
class
compositeiterator
implements
iterator
@override
public
boolean
hasnext() elseelse}}
@override
public object next()
return component;
}else
}@override
public
void
remove()
}
例子**
最頂層抽象類
public
abstract
class
menucomponent
public
void
remove(menucomponent component)
public string getname()
public string getdescription()
public
double
getprice()
public
boolean
isvegetarian()
public
void
print()
public iterator createiterator()
}選單組(結點)
public
class
menu
extends
menucomponent
public
void
add(menucomponent component)
public
void
remove(menucomponent component)
public string getname()
public string getdescription()
public
void
print()
}public iterator createiterator()}葉子
public
class
menuitem
extends
menucomponent
public string getname()
public string getdescription()
public
boolean
isvegetarian()
public
double
getprice()
public
void
print()
system.out.println(", " + getprice());
system.out.println(" --" + getdescription());
}}客戶端
public
class
waitress
public
void
printmenu()
public
void
printvegetariarianmenu()
} catch (exception e) }}
}public
class
menutestdrive
}
設計模式 迭代器和組合模式
給餐廳選單加入乙個迭代器 public inte ce iterator boolean hasnext object next public class dinermenuiterator implements iterator menuitem items int position 0 publ...
設計模式之迭代器和組合模式
迭代器模式 1 簡介 迭代器模式提供一種方法訪問乙個聚合物件中的各個元素,而 不暴露其內部實現方式。1 它讓我們能夠遊走在各種聚合型別資料的每乙個元素之間,而有無需讓大家知道遊走的什麼型別的聚合,反正都能夠達到迴圈輸出元素的目的。2 它能夠把遊走的任務搬到迭代器上,而不再使用各種適合自己聚合型別的f...
設計模式 狀態模式組合模式迭代器模式
狀態模式 將物件的轉換封裝在內部組合模式 元件在內部具有特定的資料結構 使用者操作 但是不想讓得知內部的實施細節 使用者對元件的內部的物件操作 使用者操作乙個物件多型呼叫 執行時依賴 編譯是確定型別 編譯時多型 大作業的時候要求加入這個的理解 效能較好迭代器模式 獲得當前的元素 下乙個元素 開頭是否...