访问者模式

模式说明

访问者模式即表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

模式结构图

程序示例

说明:男人、女人被成功、失败‘访问’的反应

代码:

# -*- coding: cp936 -*-

class Person:
    def Accept(self,visitor):
        pass

class Man(Person):
    def Accept(self,visitor):
        visitor.GetManConclusion(self)

class Woman(Person):
    def Accept(self,visitor):
        visitor.GetWomanConclusion(self)

class Action:
    def GetManConclusion(self,concreteElementA):
        pass
    def GetWomanConclusion(self,concreteElementB):
        pass

class Success(Action):
    def GetManConclusion(self,concreteElementA):
        print "男人成功时,背后有个伟大的女人"
    def GetWomanConclusion(self,concreteElementB):
        print "女人成功时,背后有个不成功的男人"

class Failure(Action):
    def GetManConclusion(self,concreteElementA):
        print "男人失败时,闷头喝酒,谁也不用劝"
    def GetWomanConclusion(self,concreteElementB):
        print "女人失败时,眼泪汪汪,谁也劝不了"


#class ObjectStructure:
#    def __init__(self):
#        self.plist=[]
#    def Add(self,p):
#        self.plist=self.plist+[p]
#    def Display(self,act):
#        for p in self.plist:
#            p.Accept(act)

#if __name__ == "__main__":
#    os = ObjectStructure()
#    os.Add(Man())
#    os.Add(Woman())
#    sc = Success()
#    os.Display(sc)
#    fl = Failure()
#    os.Display(fl)

if __name__ == "__main__":
    man=Man()
    woman=Woman()
    sc =Success()
    fl =Failure()

    man.Accept(sc)
    woman.Accept(sc)
    
    man.Accept(fl)
    woman.Accept(fl)

运行结果:

参考来源:

http://www.cnblogs.com/chenssy/p/3679190.html

http://www.cnblogs.com/wuyuegb2312/archive/2013/04/09/3008320.html

http://www.cnblogs.com/java-my-life/archive/2012/06/14/2545381.html

转载于:https://www.cnblogs.com/cotton/p/3935353.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值