Python設計模式之迭代器模式原理與用法例項分析

2022-10-03 18:15:09 字數 2383 閱讀 3928

迭代器模式(iterator pattern):提供方法順序訪問乙個聚合物件中各元素,而又不暴露該物件的內部表示.

下面是乙個迭代器模式的demo:

#!/usr/bin python

# -*- coding:utf-8 -*-

__author__ = 'andy'

"""大話設計模式

設計模式——迭代器模式

迭代器模式(iterator pattern):提供方法順序訪問乙個聚合物件中各元素,而又不暴露該物件的內部表示.

"""#迭代器抽象類

class iterator(object):

def first(sel程式設計客棧f):

pass

def next(self):

pass

def isdone(self):

pass

def curritem(self):

pass

#聚集抽象類

class aggregate(object):

def createiterator(self):

pass

#具體迭代器類

class concreteiterator(iterator):

def __init__(self, aggregate):

self.aggregate = aggregate

self.curr = 0

def first(self):

return selwww.cppcns.comf.aggregate[0]

def next(self):

ret = none

self.curr += 1

if self.curr < len(self.aggregate):

ret = self.aggregate[self.curr]

return ret

def isdone(self):

return true if self.curr+1 >= len(self.aggregate) else false

def curritem(self):

return self.aggregate[self.curr]

#具體聚集類

class concreteaggregate(aggregate):

def __init__(self):

self.ilist =

def createiterator(self):

return concreteiterator(self)

class concreteiteratordesc(iterator):

def __init__(self, aggregate):

self.aggregate = aggregate

self.curr = len(aggregate)-1

def first(self):

return self.aggregate[-1]

def next(self):

ret = none

self.curr -= 1

if self.curr >= 0:

ret = self.aggregate[self.curr]

return ret

def isdone(self):

return true if self.curr-1<0 else false

curritem(self):

return self.aggregate[self.curr]

if __name__=="__main__":

ca = concreteaggregate()

ca.ilist.append("大鳥")

ca.ilist.append("小菜")

ca.ilist.append("老外")

ca.ilist.append("小偷")

itor = concreteiterator(ca.ilist)

print itor.first()

while not itor.isdone():

print itor.next()

print "————倒序————"

itordesc = concreteiteratordesc(ca.ilist)

print itordesc.first()

while not itordesc.isdone():

print itordesc.next()

執行結果:

上面類的設計如下圖:

當需要對聚集有多種方式遍歷時,可以考慮使用迭代器模式

迭代器模式分離了集合的遍歷行為,抽象出乙個迭代器類來負責,這樣既可以做到不暴露集合內部結構,又可以讓外部**透明的訪問集合內部的資料

JAVA設計模式 Iterator迭代器模式

迭代器模式 類似於for迴圈式的 段在日常開發過程中是很經常用到的,所有有了iterator模式。既然簡單的for迴圈能實現,為什麼要引入迭代器模式呢?因為iterator可以跟實現分開,單獨進行遞增。後面會詳細分析。下面通過乙個例子來看一下迭代器模式的使用。例子是乙個書架,可以往書架上放書本。為了...

JAVA設計模式 Iterator迭代器模式

迭代器模式 類似於for迴圈式的 段在日常開發過程中是很經常用到的,所有有了iterator模式。既然簡單的for迴圈能實現,為什麼要引入迭代器模式呢?因為iterator可以跟實現分開,單獨進行遞增。後面會詳細分析。下面通過乙個例子來看一下迭代器模式的使用。例子是乙個書架,可以往書架上放書本。為了...

設計模式之迭代器模式

概念 提供一種方法順序訪問乙個聚合物件中各個元素,而又不需暴露該物件的內部表示。main 客戶 iproject,產品介面 cproject,產品類 iiterator,迭代器介面 iprojectiterator,產品迭代器介面 cprojectiterator,產品迭代器實現類 說明 cproj...