class Iterator(ABC):
@abstractmethod
def hasNext(self):
raise NotImplemented
@abstractmethod
def next(self):
raise NotImplemented
class Container(ABC):
@abstractmethod
def getIterator(self) -> Iterator:
raise NotImplemented
name = ["Robert", "John", "Julie", "Lora"]
class NameRepository(Container):
def getIterator(self) -> Iterator:
return self.NameIterator()
class NameIterator(Iterator):
index: int = 0
def hasNext(self) -> bool:
return self.index < len(name)
def next(self):
na = None
if self.hasNext():
na = name[self.index]
self.index += 1
return na
class IteratorPatternDemo:
def __init__(self):
namesRepository: NameRepository = NameRepository()
iter: Iterator = namesRepository.getIterator()
while iter.hasNext():
name = iter.next()
print(name)
if __name__ == '__main__':
IteratorPatternDemo()
Robert
John
Julie
Lora