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

本文共 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://vgjil.baihongyu.com/

你可能感兴趣的文章
2135亿背后的双11项目协作怎么玩?
查看>>
DRDS SQL 审计与分析——全面洞察 SQL 之利器
查看>>
微信小程序:模板消息推送实现
查看>>
CodePush自定义更新弹框及下载进度条
查看>>
自己总结的php开发中用到的工具
查看>>
小程序视频或音频自定义可拖拽进度条
查看>>
PHP导出超大的CSV格式的Excel表方案
查看>>
Mac 环境下如何生成Git shh key
查看>>
jenkins 使用磁盘检查插件 disk check plugin
查看>>
使用 Ruby 拓展 Vim
查看>>
centos7下安装LNMP(nginx+PHP7.1.9+mysql5.7)
查看>>
NodeAPI学习之Buffer
查看>>
深入java单例模式
查看>>
create-react-app
查看>>
20170812-XSS跨站脚本攻击
查看>>
Let’s Build |> 使用Elixir,Phoenix和React打造克隆版的Slack(part 1)
查看>>
如何让 StackNaivgator 实现越级回跳
查看>>
工具简述
查看>>
Hbase 集群搭建
查看>>
分布式文件服务器dfs
查看>>