python设计模式(十一):代理模式模式

代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

组成:

抽象角色:通过接口或抽象类声明真实角色实现的业务方法。

代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。

真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。

实例code:

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


class Jurisdiction:
 """权限类"""

 def level1(self):
        print('权限等级1')

 def level2(self):
        print('权限等级2')

 def level3(self):
        print('权限等级3')

 def level4(self):
        print('权限等级4')


class Proxy:

 def __init__(self, name):
        self.user = name
        self._jurisdiction = Jurisdiction()

 def leve(self):

 if self.user == 'a':
 return self._jurisdiction.level1()
 elif self.user == 'b':
 return self._jurisdiction.level2()
 elif self.user == 'c':
 return self._jurisdiction.level3()
 elif self.user == 'd':
 return self._jurisdiction.level4()
 else:
            print('无此权限')


if __name__ == '__main__':
    test = Proxy('a')
    test.leve()
    test.user = 'b'
    test.leve()
    test.user = 'c'
    test.leve()
    test.user = 'd'
    test.leve()
    test.user = 'e'
    test.leve()

-----------------------
权限等级1
权限等级2
权限等级3
权限等级4
无此权限

应用场景:

  • 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是在本机器中,也可是在另一台机器中。远程代理又叫做大使(Ambassador)。好处是系统可以将网络的细节隐藏起来,使得客户端不必考虑网络的存在。

  • 虚拟(Virtual)代理(图片延迟加载的例子):根据需要创建一个资源消耗较大的对象,使得此对象只在需要时才会被真正创建。使用虚拟代理模式的好处就是代理对象可以在必要的时候才将被代理的对象加载;代理可以对加载的过程加以必要的优化。当一个模块的加载十分耗费资源的情况下,虚拟代理的好处就非常明显。

  • 保护代理(Protection Proxy )控制对原始对象的访问。保护代理用于对象应该有不同 的访问权限的时候

  • 智能引用(Smart Reference)代理:当一个对象被引用时,提供一些额外的操作,比如将对此对象调用的次数记录下来等

image
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,904评论 1 32
  • 目录 本文的结构如下: 引言 什么是代理模式 模式的结构 典型代码 代理模式分类 代码示例 代理模式和装饰者模式的...
    w1992wishes阅读 5,473评论 0 13
  • 【学习难度:★★★☆☆,使用频率:★★★★☆】直接出处:代理模式梳理和学习:https://github.com/...
    BruceOuyang阅读 5,769评论 0 1
  • 亲爱的自己 今天陪孩子上课兑换积分时,看到孩子选择兑换很简易的拼图时,突然看见自己主导孩子的心,即立放下,让孩子自...
    四叶草lyy阅读 1,751评论 0 0
  • 温馨提醒: 若您想更多了解时间管理课程,请点击如下链接 https://jinshuju.net/f/vemCsh...
    时间的天使阅读 1,837评论 0 0

友情链接更多精彩内容