学点PYTHON基础的东东--数据结构,算法,设计模式---访问者模式

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

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

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

# 轮子,引擎, 车身这些定义好了都不需要变动
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)

时间: 2024-09-27 06:56:29

学点PYTHON基础的东东--数据结构,算法,设计模式---访问者模式的相关文章

18、Python与设计模式--访问者模式

一.药房业务系统 假设一个药房,有一些大夫,一个药品划价员和一个药房管理员,它们通过一个药房管理系统组织工作流程.大夫开出药方后,药品划价员确定药品是否正常,价格是否正确:通过后药房管理员进行开药处理.该系统可以如何实现?最简单的想法,是分别用一个一个if-else-把划价员处理流程和药房管理流程实现,这样做的问题在于,扩展性不强,而且单一性不强,一旦有新药的加入或者划价流程.开药流程有些变动,会牵扯比较多的改动.今天介绍一种解决这类问题的模式:访问者模式.首先,构造药品类和工作人员类: cla

学点PYTHON基础的东东--数据结构,算法,设计模式---观察者模式

按照小明明的设计模式抄抄看看.. http://dongweiming.github.io/python-observer.html # 这个是观察者基类 class Subject(object): def __init__(self): self._observers = [] # 添加依赖的对象 def attach(self, observer): if not observer in self._observers: self._observers.append(observer) #

反爬虫-菜鸟求助,大神请进:python爬取某东评论数据遇到的问题

问题描述 菜鸟求助,大神请进:python爬取某东评论数据遇到的问题 python爬取京东评论数据,爬10页的评论没问题,后面的评论就不断重复,到底是什么原因? 解决方案 先看是不是服务器返回的内容 然后就是你请求的参数有问题 所有重复请求 解决方案二: 应该是url没去重吧 解决方案三: 最近看到一个csdn的博客专门讲如何写电商爬虫的,地址是:http://blog.csdn.net/youmumzcs/article/details/51373830,楼主可以参考

《教孩子学编程(Python语言版)》——第1章 Python 基础—认识环境 1.1 认识Python

第1章 Python 基础-认识环境 如今,几乎任何东西之中都有一个计算机,例如电话.汽车.手表.电子游戏机.跑步机.贺卡或者机器人.计算机编程或编码,就是要告诉计算机如何执行一项任务,因此,理解如何编写代码,可以将计算机的能力控制在你的指间. 计算机程序,也叫作应用程序(applications或App),它告诉计算机做什么.Web App可以告诉计算机如何记录你喜欢的音乐:游戏App告诉计算机如何用逼真的图像显示一个古代的战场:一个简单的App可以让计算机绘制出如图1-1所示的类似六边形的.

Python基础框架和工具

Python基础框架和工具 最近在学Python金融大数据分析,在安装Python进行大数据分析的环境时遇到很多问题,例如:在安装pandas包时候就要到各种错误,总是缺少很多安装包,最后发现利用Python的Anaconda进行科学计算环境的搭建非常方便. Anaconda是和Canopy类似的科学计算环境,安装非常方便,而且自带的conda包管理器也十分强大. 1. Anaconda介绍: 我们可以从http://continuum.io/downloads上下载适合你操作系统的Anacon

Tag是个什么东东

摘要: 写这篇文字是因为我曾对tag的不解,经过学习研究分析和大神的相助得以感悟,终理解其缘由.网络时代的好处就是想写就写又本着朋友帮宗旨-----我分享我快乐,所以我就想快乐一把 写这篇文字是因为我曾对tag的不解,经过学习研究分析和大神的相助得以感悟,终理解其缘由.网络时代的好处就是想写就写又本着朋友帮宗旨-----我分享我快乐,所以我就想快乐一把.也让读过此文的网友彻底解决写不好tag困惑. 我的信誓旦旦也不一定能打消童鞋们的疑虑,或许有人不屑,这也拿来说!也有人会说我还真不知呢?也许还有

《python 与数据挖掘 》一 第2章 Python基础入门

本节书摘来自华章出版社<python 与数据挖掘 >一书中的第1章,第2.1节,作者张良均 杨海宏 何子健 杨 征,更多章节内容可以访问"华章计算机"公众号查看. 第2章 Python基础入门 本章是Python的基础章节,读者可以在这章中学习到丰富的Python基础知识.首先我们会从操作符和最简单的数字数据入手,然后就是流程控制,到这里读者能够对Python程序结构有一个清晰的认识.接着是较复杂的数据结构,主要涉及Python最常用的五大内建数据类型:列表,字符串,元组,

新人自学~!!WAS是个什么东东啊!!!??

问题描述 我不说我刚毕业--之前学的是COBOL--现在这公司要用J2EE--没学过啊!!好吧自学--自己看书--没人教--他们都忙我知道--偶尔问点问题--好吧一个月后书看完了--叫我写网页注册用户管理管理员管理这么一个系统--尼玛这是什么东西啊???好吧再自学--借JSP的书看--又是半个月--纳尼!要用TOMCAT!又是什么东东!?好吧--自己百度自学--又是半个月--搞出第一个jsp--再一个月后--写完了jsp的代码能跑而且功能齐全--叫我pu到WAS上面--我了个去!--------

Python基础10 反过头来看看

原文:Python基础10 反过头来看看 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   从最初的"Hello World",走到面向对象.该回过头来看看,教程中是否遗漏了什么. 我们之前提到一句话,"Everything is Object". 那么我们就深入体验一下这句话.   需要先要介绍两个内置函数,dir()和help() dir()用来查询一个类或者对象所有属性.你可以尝试一下 &