迭代器模式(
iterator
)用於依序遍歷訪問集合物件的每一元素,但不暴露集合物件的內部結構,只允許讓外部來訪問集合內部的資料,在實作上通常會抽象出乙個迭代器類並含有
hasnext()
及next()
之介面定義
,再由其繼承具體子類負責集合物件的遍歷行為之功能。
示例:from abc import abcmeta, abstractmethod
class iterator(object): #
迭代器抽象基類
__metaclass__ = abcmeta
@abstractmethod
defhasnext(self):
pass
@abstractmethod
defnext(self):
pass
class concreteiterator(iterator): #
具體子類
def __init__(self, alist): #
傳入list型式之
alist引數
self.alist = alist
def hasnext(self):
'''判別是否還有下乙個元素'''
return self.alist!=#
直接回傳條件式判斷之
bool值
def next(self):
'''返回下乙個元素'''
return self.alist.pop(0) #
移除列表中指定索引之元素
---移除指定索引時會將該元素傳回,故可知目前值為何(
*但會破壞原
list
之存值)
classaggregate(object): #
一般抽象基類
def iterator(self):
pass
class concreteaggregate(aggregate): #
一般具體子類
def __init__(self, alist):
self.alist = alist
def iterator(self):
'''返回迭代器物件'''
return concreteiterator(self.alist)#把
list
值傳入concreteiterator
類中以初始化,故此回傳值便具有迭代器功能
if __name__ == "__main__":
concreteaggregate = concreteaggregate([1, 2, 3])
concreteiterator = concreteaggregate.iterator() #此變數已具迭代器功能
while concreteiterator.hasnext():
print concreteiterator.next()
輸出:12
3
行為型模式(四) 迭代器模式
迭代器 iterator 模式 提供乙個物件來順序訪問聚合物件中的一系列資料,而不暴露聚合物件的內部表示。迭代器模式是一種物件行為型模式,優點 1 訪問乙個聚合物件的內容而無須暴露它的內部表示。2 遍歷任務交由迭代器完成,這簡化了聚合類。3 它支援以不同方式遍歷乙個聚合,甚至可以自定義迭代器的子類以...
設計模式 行為型模式 迭代器模式
抽象聚合類 abstract class abstractobjectlist public void addobject object obj public void removeobject object obj public list getobjects 宣告建立迭代器物件的抽象工廠方法 p...
設計模式 行為型模式 迭代器模式
提供乙個物件來順序訪問聚合物件中的一系列物件,而不暴露聚合物件的內部表示。屬於一種物件行為型模式。優點訪問聚合物件內部無需暴露它的內部表示 遍歷任務交由迭代器完成,簡化了聚合類 它支援以不同方式遍歷乙個聚合,甚至可以自定義迭代器的子類以支援新的遍歷 增加新的聚合類和迭代器類很方便,無需修改原有 封裝...