from abc import ABCMeta, abstractmethod
# 访问模式:封装一些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作
# 三个角色:访问者、数据节点、对象结构
class DataNode(metaclass=ABCMeta):
"""数据结构类"""
def access(self, visitor):
"""接受访问者的访问"""
visitor.visit(self)
class Visitor(metaclass=ABCMeta):
"""访问者"""
@abstractmethod
def visit(self, data):
"""对数据对象的访问操作"""
pass
class ObjectStructure:
"""数据结构的管理类,也是数据对象的容器,可遍历容器内的所有元素"""
def __init__(self):
self.__datas = []
def add(self, dataElement):
self.__datas.append(dataElement)
def action(self, visitor):
"""进行数据访问的操作"""
for data in self.__datas:
data.accept(visitor)