使用Python实现访问者模式
访问者模式是一种对象行为模式,可以用于将数据结构与作用于结构上的操作分离。通过这种分离,可以达到添加新的操作而无需修改原有结构的目的。
下面是使用Python实现访问者模式的示例代码:
python
# 定义一个数据结构
class Element:
def accept(self, visitor):
pass
# 具体的数据结构A
class ConcreteElementA(Element):
def accept(self, visitor):
visitor.visit_concrete_element_a(self)
# 具体的数据结构B
class ConcreteElementB(Element):
def accept(self, visitor):
visitor.visit_concrete_element_b(self)
# 定义访问者接口
class Visitor:
def visit_concrete_element_a(self, element_a):
pass
def visit_concrete_element_b(self, element_b):
pass
# 具体的访问者实现A
class ConcreteVisitorA(Visitor):
def visit_concrete_element_a(self, element_a):
print("Visitor A is visiting ConcreteElementA")
def visit_concrete_element_b(self, element_b):
print("Visitor A is visiting ConcreteElementB")
# 具体的访问者实现B
class ConcreteVisitorB(Visitor):
def visit_concrete_element_a(self, element_a):
print("Visitor B is visiting ConcreteElementA")
def visit_concrete_element_b(self, element_b):
print("Visitor B is visiting ConcreteElementB")
# 创建数据结构对象
element_a = ConcreteElementA()
element_b = ConcreteElementB()
# 创建访问者对象
visitor_a = ConcreteVisitorA()
visitor_b = ConcreteVisitorB()
# 让访问者访问数据结构
element_a.accept(visitor_a)
element_b.accept(visitor_a)
element_a.accept(visitor_b)
element_b.accept(visitor_b)
运行上述代码,可以得到以下输出:
Visitor A is visiting ConcreteElementA
Visitor A is visiting ConcreteElementB
Visitor B is visiting ConcreteElementA
Visitor B is visiting ConcreteElementB
这说明使用访问者模式,在不修改数据结构的前提下,可以为数据结构添加新的访问操作。