編寫程序展示一個學校院系結構:需求是這樣,要在一個頁面中展示出學校的院系組成,一個學校有多個學院,一個學院有多個系。
基本介紹
1) 迭代器模式(Iterator Pattern)是常用的設計模式,屬於行爲型模式
2) 如果我們的集合元素是用不同的方式實現的,有數組,還有java的集合類,或者還有其他方式,當客戶端要遍歷這些集合元素的時候就要使用多種遍歷方式,而且還會暴露元素的內部結構,可以考慮使用迭代器模式解決。
3) 迭代器模式,提供一種遍歷集合元素的統一接口,用一致的方法遍歷集合元素,不需要知道集合對象的底層表示,即:不暴露其內部的結構。
迭代器模式的原理類圖
對原理類圖的說明-即(迭代器模式的角色及職責)
1) Iterator : 迭代器接口,是系統提供,含義 hasNext, next, remove
2) ConcreteIterator : 具體的迭代器類,管理迭代
3) Aggregate :一個統一的聚合接口, 將客戶端和具體聚合解耦
核心代碼:
//判斷list中還有沒有下一個元素
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
if(index >= departmentList.size() - 1) {
return false;
} else {
index += 1;
return true;
}
}
@Override
public Object next() {
// TODO Auto-generated method stub
return departmentList.get(index);
}
實際上就是統一了訪問的流程,採用了同一個接口進行訪問集合中各元素。
迭代器模式的注意事項和細節
優點
1) 提供一個統一的方法遍歷對象,客戶不用再考慮聚合的類型,使用一種方法就可以遍歷對象了。
2) 隱藏了聚合的內部結構,客戶端要遍歷聚合的時候只能取到迭代器,而不會知道聚合的具體組成。
3) 提供了一種設計思想,就是一個類應該只有一個引起變化的原因(叫做單一責任原則)。在聚合類中,我們把迭代器分開,就是要把管理對象集合和遍歷對象集合的責任分開,這樣一來集合改變的話,隻影響到聚合對象。而如果遍歷方式改變的話,隻影響到了迭代器。
4) 當要展示一組相似對象,或者遍歷一組相同對象時使用, 適合使用迭代器模式
缺點
每個聚合對象都要一個迭代器,會生成多個迭代器不好管理類