代理模式(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()

上面的类的设计如下图:

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

作者:Andy
出处:http://www.cnblogs.com/onepiece-andy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

大话设计模式Python实现-代理模式的更多相关文章

  1. 大话设计模式C++版——代理模式

    本篇开始前先发个福利,程杰的<大话设计模式>一书高清电子版(带目录)已上传至CSDN,免积分下载. 下载地址:http://download.csdn.net/detail/gufeng9 ...

  2. 大话设计模式Python实现-迭代器模式

    迭代器模式(Iterator Pattern):提供方法顺序访问一个聚合对象中各元素,而又不暴露该对象的内部表示. 下面是一个迭代器模式的demo: #!/usr/bin/env python # - ...

  3. 大话设计模式Python实现-解释器模式

    解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 下面是一个解释器模式的demo: #!/usr/ ...

  4. 大话设计模式Python实现-命令模式

    命令模式(Command Pattern):将请求封装成对象,从而使可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作. 下面是一个命令模式的demo: #!/usr/bi ...

  5. 大话设计模式Python实现-桥接模式

    桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化. 下面是一个桥接模式的demo: #!/usr/bin/env python # -*- coding: ...

  6. 大话设计模式Python实现-组合模式

    组合模式(Composite Pattern):将对象组合成成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性. 下面是一个组合模式的demo: #!/us ...

  7. 大话设计模式Python实现-备忘录模式

    备忘录模式(Memento Pattern):不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,这样已经后就可将该对象恢复到原先保存的状态 下面是一个备忘录模式的demo: #! ...

  8. 大话设计模式Python实现-状态模式

    状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 下面是一个状态模式的demo: #!/usr/bin/env python # -*- ...

  9. 大话设计模式Python实现-建造者模式

    建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 下面是一个建造者模式的demo #!/usr/bin/env python # ...

随机推荐

  1. WebApi接口安全性 接口权限调用、参数防篡改防止恶意调用

    背景介绍 最近使用WebApi开发一套对外接口,主要是数据的外送以及结果回传,接口没什么难度,采用WebApi+EF的架构简单创建一个模板工程,使用template生成一套WebApi接口,去掉put ...

  2. netCore3.0+webapi到前端vue(后端)

    第一步创建api项目 创建完成启动F5!! 如图 数据库我用的是mysql 用ef操作数据 开发环境:Win10 + VS2019Mysql服务器版本:8.0.16 1.下载并安装插件(必备) MyS ...

  3. laravel 163发送邮件

    配置163邮箱账户 首先需要有163邮箱,这里在163邮箱必须在设置里面开启SMTP服务,并设置密码 修改laravel根目录下的.env文件, 设置邮箱相关内容: MAIL_DRIVER=smtp ...

  4. 面试官常问的Nginx的几个问题

    1.什么是Nginx? Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3 ...

  5. Error: Opening Robot Framework log failed on mac jenkins

    For resolve your problem you must : Connect on your jenkins url (http://[IP]:8080/) Click on Manage ...

  6. 物联网通信 - RESTDemo示例程序(Java版本)

    源码下载  -> 提取码  QQ:505645074 Netty的Restful API实现 Get: http://127.0.0.1:8662/test Post http://127.0. ...

  7. centos7 apache 配置ssl

    因为小程序后台服务器需要是https的,所以这两天赶紧百度了一波什么是https以及怎么将服务器升级为https.虽然网上教程很多但因具体环境可能有差异导致一路遇坑,摸爬滚打了两天终于弄好了.遂记下一 ...

  8. ftp上传文件时遇到: ftplib.error_perm: 553 Could not create file

    问题描述 今天在使用python的ftplib模块上传文件时,碰到了这样的问题: ftplib.error_perm: 553 Could not create file. 原因 原因是FTP下对应的 ...

  9. [Tutorial]综述阅读笔记 <Visual Odometry PartII_Introduce about BA>

    目录 Visual Odometry: Part II - Matching, Robustness, and Applications ---- paper notes 特征点的选择与匹配 特征点匹 ...

  10. Rust第一次综合练习

    读取文件哈. 但分成了lib.rs和main.rs. 按文档上不行,自己胡乱的调通,但原理不熟悉. 里面的套路代码还是蛮多的. src/lib.rs use std::io::Read; use st ...