今日分享主题:Python 设计模式之访问者模式。
定义
访问者模式是指封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义于作用于这些元素的新操作。
应用场景
1、要遍历不同的对象,根据对象进行不同的操作的场景;
2、当一个对象被多个不同对象顺次处理的情况,可以考虑使用访问者模式;
3、报表生成器也可以使用访问者模式实现,报表的数据源由多个不同的对象提供,每个对象都是Visitor,报表这个Element顺次Accept各访问者完善并生成对象。
Python 代码实现
1class Person(object):
2 pass
3
4class Man(Person):
5 pass
6
7class Woman(Person):
8 pass
9
10class Girl(Woman,Man):
11 pass
12
13class Son(Man, Woman):
14 pass
15
16class Visitor(object):
17 def visit(self, person, *args, **kwargs):
18 meth = None
19 #为了方便且快速地看清继承关系和顺序,可以用__mro__方法来获取这个类的调用顺序。
20 for cls in person.__class__.__mro__:
21 # print(cls)
22 meth_name = 'visit_'