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

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

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

# 轮子,引擎, 车身这些定义好了都不需要变动
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. mysql定时脚本(event),类似oracle的job

    mysql定时脚本(event),类似oracle的job   我有2张表:tb_push_data 和 tb_push_data_log 现在需要每隔一段时间将tb_push_data 符合条件的 ...

  2. 第二十九篇、UICollectionView瀑布流

    1.实现思路 >第一种方案:UIScrollView 镶嵌三个UITableView (不推荐使用) >第二种方案:UIScrollView 镶嵌UIImageView (需要解决循环利用 ...

  3. Xcode修改项目名称教程

    http://wenku.baidu.com/view/4e939b1cf61fb7360a4c653b

  4. 引用类型之Function类型

    Function类型 ECMAScript中最有意思的就是函数了,有意思的根源,在于函数实际上是对象.每个函数都是Function的实例,具有属性和方法.而重要的一点是,函数名,不过是指向函数的指针, ...

  5. JavaScript最佳实践:可维护性

    代码约定 一.可读性 代码缩进 包含注释 二.变量和函数命名 变量名应为名词如car或person 函数名应该以动词开始,如getName().返回布尔类型值的函数一般以is开头,如isEnable( ...

  6. Smarty模板引擎技术

    Smarty模板引擎技术 什么是模板引擎? 什么是Smarty模板引擎? 为何选择Smarty模板引擎? 如何使用Smarty模板引擎? 一.历史背景 场景一:回顾之前编写PHP项目的方式 //链接数 ...

  7. @Autowired与@Resource用法

    官方文档中有这样一段话. If you intend to express annotation-driven injection by name, do not primarily use @Aut ...

  8. httpd配置Gzip压缩

    以下设置在 /etc/httpd/conf/httpd.conf 文件末尾加入即可.(不同方式安装的httpd可能主配置文件位置不同,请自行查找) 一.mod_deflate模块:文件压缩 官方文档: ...

  9. CURL模拟登陆

    index.html <a href="http://adtuu-server.com/login/login.php?auth_username=admin&auth_pas ...

  10. sizeof的用法的一些归纳

    1 sizeof 是运算符,不是函数 2 sizeof 不能求得void类型的长度,能求得 void*类型的指针的长度 sizeof(void) 会导致编译错误.因为声明一个变量的最重要的作用就是告诉 ...