博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学点PYTHON基础的东东--数据结构,算法,设计模式---访问者模式
阅读量:6068 次
发布时间:2019-06-20

本文共 1310 字,大约阅读时间需要 4 分钟。

说实话,感觉不是特别多,可能没遇到过多场面,

所以对应用场景没感觉吧。

反正,各种模式就是把类的实例传来传去,久而久之,产生了一些规律。。。:)

# 轮子,引擎, 车身这些定义好了都不需要变动class Wheel:    def __init__(self, name):        self.name = name    def accept(self, visitor):        # 每个visitor是同样的,但是其中的方法是不一样的,比如这里是visitWheel,        # 然后传入了self,想想?他其实想做什么就能做什么        visitor.visitWheel(self)class Engine:    def accept(self, visitor):        visitor.visitEngine(self)class Body:    def accept(self, visitor):        visitor.visitBody(self)# 我们要组合成车class Car:    def __init__(self):        self.engine = Engine()        self.body   = Body()        self.wheels = [ Wheel("front left"), Wheel("front right"),                        Wheel("back left") , Wheel("back right") ]    # 这个也不需要在动,他只是上面部件的组合,只是做了属性的委托    def accept(self,visitor):        visitor.visitCar(self)        self.engine.accept(visitor)        self.body.accept(visitor)        for wheel in self.wheels:            wheel.accept(visitor)# 这个才是我们的访问者,每次的修改都在这里面class PrintVisitor:    def visitWheel(self, wheel):        print "Visiting "+wheel.name+" wheel"    def visitEngine(self, engine):        print "Visiting engine"    def visitBody(self, body):        print "Visiting body"    def visitCar(self, car):        print "Visiting car"if __name__ == '__main__':    car = Car()    visitor = PrintVisitor()    car.accept(visitor)

转载地址:http://woygx.baihongyu.com/

你可能感兴趣的文章
SGU 303 Great Berland Wall(计算几何判环+最小割)
查看>>
3D游戏引擎剖析
查看>>
21. D3D-Sprite
查看>>
转载 关于使用typeid时要注意的问题
查看>>
JAVA的String 类
查看>>
cocos2d 的touch事件要点
查看>>
程序入口
查看>>
Spring MVC 3.0 RestTemplate
查看>>
ADO.NET访问数据集的表、行和列
查看>>
Flink - Working with State
查看>>
svn add xxx.txt 提示A (bin) xxx.txt
查看>>
数据库设计
查看>>
C语言 · 分数统计
查看>>
推断两条单链表是否相交
查看>>
Linux ftrace框架介绍及运用
查看>>
UVA 12295 Optimal Symmetric Paths
查看>>
【技术贴】tomcat启动失败 can not find a free socket的解决办法
查看>>
根据结构体里面元素的某个地址计算机构体地址
查看>>
如何使用 ADO.NET 和 Visual C# .NET 以编程方式创建 SQL Server 数据库
查看>>
Hash碰撞与拒绝服务攻击
查看>>