設計模式 迭代器模式

2021-09-25 02:19:04 字數 2137 閱讀 8423

什麼是迭代模式

iterator模式也叫迭代模式,是行為模式之一,它把對容器中包含的內部物件的訪問委讓給外部類,使用iterator按順序進行遍歷訪問的設計模式。

不使用迭代模式的應用

在應用iterator模式之前,首先應該明白iterator模式用來解決什麼問題。或者說,如果不使用iterator模式,會存在什麼問題。

由容器自己實現順序遍歷。直接在容器類裡直接新增順序遍歷方法

讓呼叫者自己實現遍歷。直接暴露資料細節給外部

不使用迭代模式的缺點

容器類承擔了太多功能:一方面需要提供新增刪除等本身應有的功能;一方面還需要提供遍歷訪問功能。

往往容器在實現遍歷的過程中,需要儲存遍歷狀態,當跟元素的新增刪除等功能夾雜在一起,很容易引起混亂和程式執行錯誤等。

迭代模式的角色和職責

iterator(迭代器介面):該介面必須定義實現迭代功能的最小定義方法集,比如提供hasnext()和next()方法。

concreteiterator(迭代器實現類): 比如bookshelfiterator,迭代器介面iterator的實現類。可以根據具體情況加以實現。

aggregate(容器介面):定義基本功能以及提供類似iterator iterator()的方法。

concreteaggregate(容器實現類): 比如bookshelf,容器介面的實現類。必須實現iterator iterator()方法。

迭代模式的優點

最重要的乙個因素,引用iterator可以使遍歷和實現分離開來

容器類承擔了太多功能:一方面需要提供新增刪除等本身應有的功能;一方面還需要提供遍歷訪問功能。

往容器在實現遍歷的過程中,需要儲存遍歷狀態,當跟元素的新增刪除等功能夾雜在一起,很容易引起混亂和程式執行錯誤等。

package com.xiaoxu.design.iterator;

/*** 迭代器介面

*/public inte***ce iterator

package com.xiaoxu.design.iterator;

/** * 容器介面

*/public inte***ce aggregate

package com.xiaoxu.design.iterator;

/** * 書架

*/public class bookshelf implements aggregate

@override

public iterator iterator()

public book getbookat(int index)

books[last] = book;

last ++;

}public int getlength()

}

package com.xiaoxu.design.iterator;

/** * 書架迭代器實現類

*/public class bookshelfiterator implements iterator

@override

public object next()

@override

public boolean hasnext()

return false;}}

package com.xiaoxu.design.iterator;

public class book

public string getname()

@override

public string tostring() ';}}

驗證:

設計模式 迭代器模式

迭代器模式是屬於物件行為性的模式。首先是定義 提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露物件的表示方法。迭代器的結構圖 適用性 1 訪問乙個聚合物件的內容而無需暴露它的內部表示 2 支援聚合物件的多種遍歷 3 為遍歷不同的聚合結構提供乙個統一的介面 支援多型迭代 協作 concretei...

設計模式 迭代器模式

iterator,提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示。迭代器模式就是分離了集合物件的遍歷行為,抽象出乙個迭代器類來負責,這樣既可以做到不暴露集合的內部結構,又可讓外部 透明地訪問集合內部的資料。iterator迭代器抽象類 迭代器抽象類 abstract clas...

設計模式 迭代器模式

迭代器模式在我們日常程式設計中使用非常頻繁,像list map 陣列等都會用到迭代器模式。迭代器模式屬於行為型模式,它用於順序訪問集合物件的元素,不需要知道集合物件的底層表示。在迭代器模式結構圖中包含如下幾個角色 它支援以不同的方式遍歷乙個聚合物件。迭代器簡化了聚合類。在同乙個聚合上可以有多個遍歷。...