行為型模式 迭代器模式

2021-09-20 12:40:24 字數 1788 閱讀 6429

迭代器模式(

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...

設計模式 行為型模式 迭代器模式

提供乙個物件來順序訪問聚合物件中的一系列物件,而不暴露聚合物件的內部表示。屬於一種物件行為型模式。優點訪問聚合物件內部無需暴露它的內部表示 遍歷任務交由迭代器完成,簡化了聚合類 它支援以不同方式遍歷乙個聚合,甚至可以自定義迭代器的子類以支援新的遍歷 增加新的聚合類和迭代器類很方便,無需修改原有 封裝...