关闭

Python设计模式(十五)【访问者模式】

标签: python设计模式对象
1635人阅读 评论(0) 收藏 举报
分类:

只要能执着远大的理想,且有不达目的绝不终止的意愿,便能产生惊人的力量。

"""访问者模式"""
class Node(object):
    pass

class A(Node):
    pass

class B(Node):
    pass

class C(A, B):
    pass

class Visitor(object):
    def visit(self, node, *args, **kwargs):
        meth = None
        """python支持多重继承,在解析父类的__init__时,定义解析顺序的是子类的__mro__属性,内容为一个存储要解析类顺序的元组。"""
        """观察到,super的执行路径和类的__mro__列举的类顺序吻合;而__mro__的顺序可以看作是深搜的结果"""
        for cls in node.__class__.__mro__:
            """方法名"""
            meth_name = 'visit_' + cls.__name__


            """getattr()函数是Python自省的核心函数,具体使用大体如下:
             获取对象引用getattr,Getattr用于返回一个对象属性,或者方法

             如果Visitor对象中有属性meth_name则获得方法返回的值,否则赋值None
           """
            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('通常访问: ' + node.__class__.__name__)

    def visit_B(self, node, *args, **kwargs):
        print('访问_B ' + node.__class__.__name__)

a = A()
b = B()
c = C()
visitor = Visitor()
visitor.visit(a)
visitor.visit(b)
visitor.visit(c)

运行结果如图:

这里写图片描述

0
0
查看评论

访问者模式(python)

访问者模式:表示一个作用于某对象结构中的各元素的操作。它可以使你在不改变各元素的类的前提下定义作用于这些元素的新操作。 访问者模式适用于数据结构相对稳定而基于该数据结构的操作需要经常扩展的系统。因为该模式的优点就是增加新的操作很容易。 #encoding=utf-8 # #by panda #访...
  • ponder008
  • ponder008
  • 2011-10-29 12:49
  • 1935

【程序设计】Python的访问者模式

访问者模式的定义如下:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义于作用于这些元素的新操作。 提到访问者模式,就不得不提一下双分派。分派分为静态分派和动态分派。 静态分派即根据请求者的名称和接收到的参数,决定多态时处理的操作。 Python原生是不...
  • ChenVast
  • ChenVast
  • 2018-01-29 11:29
  • 30

Python设计模式(十五)【访问者模式】

只要能执着远大的理想,且有不达目的绝不终止的意愿,便能产生惊人的力量。"""访问者模式""" class Node(object): passclass A(Node): passclass B(Node): pas...
  • WuLex
  • WuLex
  • 2016-08-30 14:18
  • 1635

Java设计模式之--访问者模式(Visitor)

概念: 访问者模式(Visitor)行为设计模式。访问者模式被用在针对一组相同类型对象的操作。优点是,可以把针对此对象的操作逻辑转移到另外一个类上。用于数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。访问者模式适用于数据结构相对稳定算法又易变化的系统。因为访问者模式使得算法操作增加...
  • lqh517
  • lqh517
  • 2016-06-24 12:12
  • 322

设计模式读书笔记-----访问者模式

生老病死乃常态,是我们每个人都逃脱不了的,所以进医院就是一件再平常不过的事情了。在医院看病,你首先的挂号,然后找到主治医生,医生呢?先给你稍微检查下,然后就是各种处方单(什么验血、CD、B超等等,太坑了。。。。),再然后就给你一个处方单要你去拿药。拿药我们可以分为两步走,第一步,我们要去交钱,划价人...
  • chenssy
  • chenssy
  • 2013-09-25 21:31
  • 9409

设计模式-访问者模式-visitor-python

访问者模式
  • CCyutaotao
  • CCyutaotao
  • 2017-08-10 19:40
  • 108

pythoncookbook深入挖掘------------访问者模式

问题 你要处理由大量不同类型的对象组成的复杂数据结构,每一个对象都需要需要进行不同的处理。 比如,遍历一个树形结构,然后根据每个节点的相应状态执行不同的操作。 解决方案 这里遇到的问题在编程领域中是很普遍的,有时候会构建一个由大量不同对象组成的数据结构。 假设你要写一个表示数学表达式的程序,那么...
  • happyAnger6
  • happyAnger6
  • 2016-09-22 23:33
  • 378

PHP设计模式——访问者模式

声明:本系列博客参考资料《大话设计模式》,作者程杰。       访问者模式表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。    ...
  • jhq0113
  • jhq0113
  • 2015-06-11 10:12
  • 2166

观察者模式(Observer),责任链模式,访问者模式(Visitor)

概念:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。行为型模式。 main(), IObservable,被观察者接口 CHanFeiZiObservable,被观察者韩非子 IObserver,观察者接口 CLiSiObs...
  • tianyucad123
  • tianyucad123
  • 2016-08-13 20:10
  • 1133

行为型模式之十——访问者模式

模式定义访问者模式(Visitor Pattern):表示一个作用于某对象结构中各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。它是一种对象行为型模式。模式结构 Visitor 抽象访问者为对象结构类中每一个具体元素类声明一个访问操作,从这个操作的名称或参数类型可以...
  • kturing
  • kturing
  • 2015-11-08 23:35
  • 902
    个人资料
    • 访问:1295475次
    • 积分:18599
    • 等级:
    • 排名:第594名
    • 原创:312篇
    • 转载:932篇
    • 译文:123篇
    • 评论:297条
    博客专栏
    文章分类
    打赏
    如果你觉得我的文章对您有用,请随意打赏。 微信 支付宝