大纲 | 小结 |
---|---|
基础准则 | 基础准则 |
创建型模式 | 单例模式 |
- | 原型模式 |
- | 简单工厂模式 |
- | 抽象工厂模式 |
- | 建造者模式 |
结构型模式 | 代理模式 |
- | 适配器模式 |
- | 桥接模式 |
- | 装饰器模式 |
- | 门面/外观模式 |
- | 享元模式 |
- | 组合模式 |
行为型模式 | 模板方法模式 |
- | 策略模式 |
- | 命令模式 |
- | 职责链模式 |
- | 状态模式 |
- | 观察者模式 |
- | 中介者模式 |
- | 迭代器模式 |
- | 访问者模式 |
- | 备忘录模式 |
- | 解释器模式 |
迭代器模式是通过将聚合对象的遍历行为分离出来,抽象成迭代器类来实现的,其目的是在不暴露聚合对象的内部结构的情况下,让外部代码透明地访问聚合的内部数据。
![](https://img.haomeiwen.com/i2068504/5889881ccf2935ec.jpg)
import abc
class IAggregate(metaclass=abc.ABCMeta):
@abc.abstractmethod
def add(self, it:'IIterator'):
pass
@abc.abstractmethod
def remove(self, it:'IIterator'):
pass
@abc.abstractmethod
def getIterator(self, it:'IIterator'):
pass
class Aggregate(IAggregate):
def __init__(self):
self.list = []
self.iter = IteratorCls(self.list)
def add(self, obj):
self.list.append(obj)
def remove(self, obj):
if obj in self.list:
self.list.remove(obj)
def getIterator(self):
return self.iter
class IIterator(metaclass=abc.ABCMeta):
@abc.abstractmethod
def first(self):
pass
@abc.abstractmethod
def next(self):
pass
@abc.abstractmethod
def hasNext(self):
pass
class IteratorCls(IIterator):
def __init__(self, list:list):
self.list = list
self.index = -1
def first(self):
self.index = 0
return self.list[self.index]
def next(self):
if self.hasNext():
self.index+=1
return self.list[self.index]
else:
return None
def hasNext(self):
return self.index<len(self.list)-1
if __name__ == '__main__':
ag = Aggregate()
ag.add({'a':1})
ag.add({'b':2})
iter = ag.getIterator()
print(iter.first())
print(iter.next())
print(iter.next())
print(iter.first())
print(iter.next())
print(iter.next())
结果
{'a': 1}
{'b': 2}
None
{'a': 1}
{'b': 2}
None
网友评论