本文实例讲述了Python设计模式之代理模式。分享给大家供大家参考,具体如下:

代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问

#!/usr/bin/env python

# -*- coding:utf-8 -*-

__author__ = 'Andy'

"""

大话设计模式

设计模式——代理模式

代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问

实现:戴励 替 卓贾易 送礼物给 娇娇

模型:

#公共接口类

class InterFace:

def request(self):

pass

#真实类

class RealSubject(InterFace):

def request(self):

print 'RealSubject request'

#代理类 调用真实类的内部方法

class ProxySubject(InterFace)

def request(self):

self.real = RealSubject()

self.real.request()

"""

# 送礼物接口

class GiveGift(object):

# 送洋娃娃

def GiveDolls(self):

pass

# 送花

def GiveFlowers(self):

pass

# 送巧克力

def GiveChocolate(self):

pass

# 被追求者类

class SchoolGirl(object):

def __init__(self, name):

self.name = name

# 追求者类

class Pursuit(GiveGift):

def __init__(self, Girl):

self.Girl = Girl

def GiveDolls(self):

print self.Girl.name, '送你洋娃娃'

def GiveFlowers(self):

print self.Girl.name, '送你花'

def GiveChocolate(self):

print self.Girl.name, '送你巧克力'

# 代理类

class Proxy(GiveGift):

def __init__(self, Girl):

self.proxy = Pursuit(Girl)

# 送洋娃娃

def GiveDolls(self):

self.proxy.GiveDolls()

# 送花

def GiveFlowers(self):

self.proxy.GiveFlowers()

# 送巧克力

def GiveChocolate(self):

self.proxy.GiveChocolate()

if __name__ == '__main__':

jiaojiao = SchoolGirl('jiaojiao')

daili = Proxy(jiaojiao)

daili.GiveDolls()

daili.GiveFlowers()

daili.GiveChocolate()

运行结果:

jiaojiao 送你洋娃娃

jiaojiao 送你花

jiaojiao 送你巧克力

上面的类的设计如下图:

代理类Proxy引用代理的实体Pursite,提供与Pursite相同的接口来代替实体

希望本文所述对大家Python程序设计有所帮助。

python中代理模式分为几种_Python设计模式之代理模式实例详解相关推荐

  1. python如何调用文件进行换位加密_python 换位密码算法的实例详解

    python 换位密码算法的实例详解 一前言: 换位密码基本原理:先把明文按照固定长度进行分组,然后对每一组的字符进行换位操作,从而实现加密.例如,字符串"Error should neve ...

  2. 在python中使用关键字define定义函数_python自定义函数def的应用详解

    这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2,参数-): ...

  3. python中必须使用import引入模块_Python之import方法引入模块详解

    在python用import或者from-import或者from-import-as-来导入相应的模块,作用和使用方法与C语言的include头文件类似.其实就是引入某些成熟的函数库和成熟的方法,避 ...

  4. python中for in range的用法_Python for i in range ()用法详解

    for i in range ()作用: range()是一个函数, for i in range () 就是给i赋值: 比如 for i in range (1,3): 就是把1,2依次赋值给i r ...

  5. python中 for i in range(10)_Python for i in range ()用法详解

    for i in range ()作用: range()是一个函数, for i in range () 就是给i赋值: 比如 for i in range (1,3): 就是把1,2依次赋值给i r ...

  6. java前端长连接框架_Java中Spring Boot+Socket实现与html页面的长连接实例详解

    Spring Boot+Socket实现与html页面的长连接,客户端给服务器端发消息,服务器给客户端轮询发送消息,附案例源码 功能介绍 客户端给所有在线用户发送消息客户端给指定在线用户发送消息服务器 ...

  7. python中列表数据类型_Python数据类型之List列表实例详解

    本文实例讲述了Python数据类型之List列表.分享给大家供大家参考,具体如下: list列表 1.概述: 通过之前的学习,我们知道变量可以存储数据,但是一个变量只能存储一个数据,现在有一个班级,班 ...

  8. python中symbols函数用法_Python基础之函数用法实例详解

    本文以实例形式较为详细的讲述了Python函数的用法,对于初学Python的朋友有不错的借鉴价值.分享给大家供大家参考之用.具体分析如下: 通常来说,Python的函数是由一个新的语句编写,即def, ...

  9. python迭代器与生成器_python的迭代器与生成器实例详解

    本文以实例详解了python的迭代器与生成器,具体如下所示: 1. 迭代器概述: 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后 ...

最新文章

  1. 宝塔linux计划任务ftp,宝塔面板定时备份网站及数据库至FTP存储空间图文教程
  2. Lotgstash日志切割示例
  3. datatable 汇总_【2019 版】中国石油大学(北京)计算机考研信息、资料汇总
  4. 基于silerlight for embedd 视频播放器的之一的问题
  5. 实时监控Cat之旅~对Get和Post进行封装,支持分布式消息树
  6. Fortran向C传递NULL值
  7. JVM 调优系列之图解垃圾回收
  8. @Modules( ... ) 多个包路径问题
  9. java 大数操作(加减乘除及取余)
  10. vue3被删除的两个功能
  11. 抱怨一下有些邮件列表的气氛
  12. JAVA与js加密解密我常用的方法
  13. android x5全屏白色,x5webview 自定义全屏界面
  14. 文档转换工具 —— 你还在为wps的word转pdf上限五页而苦恼吗?
  15. 【历史上的今天】1 月 1 日:惠普诞生;互联网的规范化;百度成立
  16. U盘格式化了怎样恢复还原(必学技能)
  17. 物欲横流的社会中,有没有那么一首诗、一首歌、一句话、一个词....不经意间勾起了你心中无限的回忆,甚至心都跟着微微颤抖了一下
  18. pmf-automl源码分析
  19. Linux查看服务器SN序列码
  20. mysql根据姓分组_mysql 分组查询 group by

热门文章

  1. 如何关闭线程池?会创建不会关闭?调用关闭方法时线程池里的线程如何反应?
  2. EventBus使用实例,观察者模式
  3. 宝塔 面板 放行端口
  4. win10 radmin远程不了_不用QQ也能电脑远程,win10这隐藏功能太良心了!真后悔发现太晚...
  5. c# oracle datasource,C# 连接Oracle 数据库 示例源码下载
  6. 【离散数学中的数据结构与算法】八 排列与组合四
  7. 【OS学习笔记】五 VirtualBox的下载、安装和配置
  8. 谈一下我对如何设计微服务接口的理解和思考
  9. php连接mysql遇到的问题: (HY000/1130) 和 [caching_sha2_password]
  10. Codeforces Round #434 (Div. 2)【A、B、C、D】