设计模式之访问模式

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)
原文地址:https://www.cnblogs.com/loveprogramme/p/13128512.html