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

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

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

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

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

  1. 学点PYTHON基础的东东--数据结构,算法,设计模式---单向链表

    看来看来,还是以下这个实现最优雅.. 其它的,要么NODE冗余,要么初始化丑陋... #!/usr/bin/env python # -*- coding: utf-8 -*- class Node: ...

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

    按照小明明的设计模式抄抄看看.. http://dongweiming.github.io/python-observer.html # 这个是观察者基类 class Subject(object): ...

  3. 【python】面试常考数据结构算法

    这里整理的都是基础的不能再基础的算法,目的就是进行一个回忆,同时作为剑指offer的一个补充~嘿嘿~ 查找算法二分查找# 实现一个二分查找# 输入:一个顺序list# 输出: 待查找的元素的位置def ...

  4. python基础:冒泡和选择排序算法实现

    冒泡排序和选择排序   首先引用一下百度百科对于冒泡算法的定义:   冒泡排序算法的原理如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素做同样的工作,从开始第一对到结尾 ...

  5. python基础一 ------排序和查找算法

    插入排序; 假设数组长度为n,先从第二个元素开始,与前一个元素比较,之后将较小的元素    放在前面,现在前两个元素是有顺序的,这时取第三个元素,与前一个元素(也就是第二个)比较,较小的放在前面   ...

  6. python基础篇(五)

    PYTHON基础篇(五) 算法初识 什么是算法 二分查找算法 ♣一:算法初识 A:什么是算法 根据人们长时间接触以来,发现计算机在计算某些一些简单的数据的时候会表现的比较笨拙,而这些数据的计算会消耗大 ...

  7. Java基础毕向东day03

    Java基础毕向东day03 1.变量 2.条件结构 3.循环结构,for while,和几种特殊的情况. 4.函数重载

  8. python基础语法、数据结构、字符编码、文件处理 练习题

    考试范围 '''1.python入门:编程语言相关概念2.python基础语法:变量.运算符.流程控制3.数据结构:数字.字符串.列表.元组.字典.集合4.字符编码5.文件处理''' 考试内容 1.简 ...

  9. 页面生命周期里面还有很东西,如PageHandlerFactory等等这些东东也够吃一壶的,发现每走到一个领域,发现要学的东西实在是太多太多啦,总感觉自己所学的东西只是沧海一粟,走过了这道坎,又是一片海洋,我只能呐喊:生命永不止息,学海无涯----够用就好。

    页面生命周期里面还有很东西,如PageHandlerFactory等等这些东东也够吃一壶的,发现每走到一个领域,发现要学的东西实在是太多太多啦,总感觉自己所学的东西只是沧海一粟,走过了这道坎,又是一片 ...

随机推荐

  1. COM 参数有in, out ,retval

    COM 参数有in, out ,retval 来源:http://blog.sina.com.cn/s/blog_472a9f0c01017uer.html In 输入参数,它的值不被返回    Ou ...

  2. iOS学习——iOS视频和推荐网站

    最近有人问有没有iOS学习的相关资料,就简单的把自己的知道的和资源共享一下: 个人感觉iOS开发人才饱和,培训泛滥,个人推荐后台升职空间大和web前端竞争小. [链接][Ronda收集整理]2014年 ...

  3. c# DataGridView操作

    #region 操作DataGridView /// <summary> /// 初始化DataGridView属性 /// </summary> /// <param ...

  4. (转)java:快速文件分割及合并

    文件分割与合并是一个常见需求,比如:上传大文件时,可以先分割成小块,传到服务器后,再进行合并.很多高大上的分布式文件系统(比如:google的GFS.taobao的TFS)里,也是按block为单位, ...

  5. JavaScript的语法规则

    JavaScript的语法规则 JavaScript区分大小写 JavaScript脚本程序须嵌入在HTML文件中 JavaScript脚本程序中不能包含HTML标记代码 每行写一条脚本语句 语句末尾 ...

  6. STL--string(转载)

    string类的构造函数: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 此外,string类还支持默认构造 ...

  7. 我对c++对象内存布局的理解

    引言 结合网上的一些资料,通过自己的一番摸索,得出了一点个人见解.现在写下来,希望与各位同学共同探讨,共同进步. 以下所有代码均是在VS2012下测试. 一个普通的基类 1: #include < ...

  8. Poj 2993 Emag eht htiw Em Pleh

    1.Link: http://poj.org/problem?id=2993 2.Content: Emag eht htiw Em Pleh Time Limit: 1000MS   Memory ...

  9. 【原】在一般处理程序中设置session

    using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using Syste ...

  10. 弹性布局学习-详解 justify-content(三)

    弹性布局学习-详解 justify-content(三)