設計模式筆記17——迭代器模式(iterator)

編寫程序展示一個學校院系結構:需求是這樣,要在一個頁面中展示出學校的院系組成,一個學校有多個學院,一個學院有多個系。

 

基本介紹

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) 當要展示一組相似對象,或者遍歷一組相同對象時使用, 適合使用迭代器模式

缺點

每個聚合對象都要一個迭代器,會生成多個迭代器不好管理類

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章