美文网首页
设计模式 - 20.迭代器模式 [行为型模式]

设计模式 - 20.迭代器模式 [行为型模式]

作者: Zszen | 来源:发表于2020-03-27 03:08 被阅读0次
大纲 小结
基础准则 基础准则
创建型模式 单例模式
- 原型模式
- 简单工厂模式
- 抽象工厂模式
- 建造者模式
结构型模式 代理模式
- 适配器模式
- 桥接模式
- 装饰器模式
- 门面/外观模式
- 享元模式
- 组合模式
行为型模式 模板方法模式
- 策略模式
- 命令模式
- 职责链模式
- 状态模式
- 观察者模式
- 中介者模式
- 迭代器模式
- 访问者模式
- 备忘录模式
- 解释器模式

迭代器模式是通过将聚合对象的遍历行为分离出来,抽象成迭代器类来实现的,其目的是在不暴露聚合对象的内部结构的情况下,让外部代码透明地访问聚合的内部数据。

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

相关文章

网友评论

      本文标题:设计模式 - 20.迭代器模式 [行为型模式]

      本文链接:https://www.haomeiwen.com/subject/jlgxuhtx.html