迭代器模式(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...