Python设计模式之代理模式实例详解


Posted in Python onJanuary 19, 2019

本文实例讲述了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 送你巧克力

上面的类的设计如下图:

Python设计模式之代理模式实例详解

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

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

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

Python 相关文章推荐
Python 获取新浪微博的最新公共微博实例分享
Jul 03 Python
python读取word文档的方法
May 09 Python
python对json的相关操作实例详解
Jan 04 Python
python实现上传下载文件功能
Nov 19 Python
Python中字典(dict)合并的四种方法总结
Aug 10 Python
深入分析python数据挖掘 Json结构分析
Apr 21 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
Nov 30 Python
python实现连连看辅助(图像识别)
Mar 25 Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
Jan 08 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
Feb 17 Python
python 判断一组数据是否符合正态分布
Sep 23 Python
用Python PIL实现几个简单的图片特效
Jan 18 #Python
Python 多维List创建的问题小结
Jan 18 #Python
python感知机实现代码
Jan 18 #Python
python实现感知器算法(批处理)
Jan 18 #Python
python实现多层感知器
Jan 18 #Python
python实现多层感知器MLP(基于双月数据集)
Jan 18 #Python
基于python实现KNN分类算法
Apr 23 #Python
You might like
PHP fopen 读取带中文URL地址的一点见解
2012/09/25 PHP
php正则表达式使用的详细介绍
2013/04/27 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
Laravel 错误提示本地化的实现
2019/10/22 PHP
用dom+xhtml+css制作的一个相册效果代码打包下载
2008/01/24 Javascript
javascript 读取图片文件的大小
2009/06/25 Javascript
return false,对阻止事件默认动作的一些测试代码
2010/11/17 Javascript
JQuery中如何传递参数如click(),change()等具体实现
2013/04/28 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
Zabbix添加Node.js监控的方法
2016/10/20 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
2016/11/01 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
Vue.js组件实现选项卡以及切换特效
2019/07/24 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
gearman的安装启动及python API使用实例
2014/07/08 Python
python logging类库使用例子
2014/11/22 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
.net软件工程师面试题
2015/03/31 面试题
Linux机考试题
2015/07/17 面试题
职称自我鉴定
2013/10/15 职场文书
信息技术教学反思
2014/02/12 职场文书
自动一体化专业求职信
2014/03/15 职场文书
关于运动会的口号
2014/06/07 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
百年孤独读书笔记
2015/06/29 职场文书
使用jpa之动态插入与修改(重写save)
2021/11/23 Java/Android
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL
win10重装系统后上不了网怎么办 win10重装系统网络故障的解决办法
2022/07/23 数码科技