不管学习什么语言,Design pattern是学习该语言后的不错选择,它可以综合性的运用各种情景
简单理解什么是Visitor模式:
既然是访问者模式,那就必然存在充当访问者角色的类,接着就是访问者的功能了,访问者能干什么?我们直接从语义上理解就是:访问其他对象!
源码演示:
''' Created on Feb 4, 2016 @author: Linux '''
if __name__ == '__main__':
print "Hello World!"
class Node(object):
pass
class A(Node):
pass
class B(Node):
pass
class C(A,B):
pass
class Visitor(object):
def visitor(self,node,*args,**kwargs):
meth = None
for cls in node.__class__.__mro__:
meth_name = 'visit_' + cls.__name__
meth = getattr(self, meth_name,None)
if meth:
break
if not meth:
meth = self.generic_visit
return meth(node,*args,**kwargs)
def generic_visit(self,node,*args,**kwargs):
print('generic_visit_' + node.__class__.__name__)
def visit_B(self,node,*args,**kwargs):
print('visit_' + node.__class__.__name__)
a = A()
b = B()
c = C()
visitor = Visitor()
visitor.visitor(a)
visitor.visitor(b)
visitor.visitor(c)
print(c.__class__.__mro__)
Hello World!
generic_visit_A
visit_B
visit_C
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class '__main__.Node'>, <type 'object'>)