广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python设计模式结构型代理模式
  • 442
分享到

Python设计模式结构型代理模式

2024-04-02 19:04:59 442人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录一、代理模式二、应用场景三、代码示例一、代理模式 代理模式,为其他对象提供一种代理,以此控制一个对象的访问方式。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象

一、代理模式

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

二、应用场景

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

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

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

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

三、代码示例

实体角色:

  • 抽象角色(Subject):通过接口或抽象类声明真实角色实现的业务方法。
  • 真实角色(Real Subject):实现了抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
  • 代理角色(Proxy):实现了抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
import abc

# 抽象角色
class Subject(metaclass=abc.ABCMeta):

    @abc.abstractmethod
    def get_content(self):
        pass

    @abc.abstractmethod
    def set_content(self, content):
        pass


# 真实角色
class RealSubject(Subject):
    def __init__(self, filename):
        self.filename = filename
        f = open(self.filename, "r", encoding="utf-8")
        self.content = f.read()
        print("读取文件...")
        f.close()

    def get_content(self):
        return self.content

    def set_content(self, content):
        f = open(self.filename, "w", encoding="utf-8")
        f.write(content)
        f.close()


# 虚代理
class VirtualProxy(Subject):
    def __init__(self, filename):
        self.filename = filename
        self.subj = None

    def get_content(self):
        if not self.subj:
            self.subj = RealSubject(self.filename)
        return self.subj.get_content()

    def set_content(self, content):
        if not self.subj:
            self.subj = RealSubject(self.filename)
        return self.subj.set_content(content)


# 保护代理
class ProtectedProxy(Subject):
    def __init__(self, filename):
        self.filename = filename
        self.subj = RealSubject(self.filename)

    def get_content(self):
        return self.subj.get_content()

    def set_content(self, content):
        raise PermissionError("您的权限不够!")


if __name__ == "__main__":
    print("--- RealSubject ---")
    subj = RealSubject("test.txt")   # 在这里就会读取文件,并占用内存。
    print(subj.get_content())
    #subj.set_content("修改内容...")
    
    print("--- VirtualProxy ---")
    subj = VirtualProxy("test.txt")  # 虚代理只有在调用 get_content 时才会读取文件,并占用内存。
    #print(subj.get_content())
    #subj.set_content("修改内容...")

    print("--- ProtectedProxy ---")
    subj = ProtectedProxy("test.txt")
    #print(subj.get_content())
    #subj.set_content("修改内容...")  # 保护代理这里不能进行修改,会报错。

到此这篇关于python设计模式结构型代理模式的文章就介绍到这了,更多相关Python代理模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python设计模式结构型代理模式

本文链接: https://www.lsjlt.com/news/139201.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python设计模式结构型代理模式
    目录一、代理模式二、应用场景三、代码示例一、代理模式 代理模式,为其他对象提供一种代理,以此控制一个对象的访问方式。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象...
    99+
    2022-11-13
  • .Net结构型设计模式之代理模式(Proxy)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、代理模式的分类:六、代理模式的具体实现七、代理模式的实现要点:1、代理模式的...
    99+
    2022-11-13
  • Python设计模式结构型组合模式
    目录一、组合模式二、应用场景三、代码示例一、组合模式 组合,将多个对象组合成为一个树状结构,来表示业务逻辑上的层次。组合模式使得用户对单个对象和组合对象的使用具有一致性。 比如,描述...
    99+
    2022-11-13
  • Python设计模式结构型享元模式
    目录一、享元模式二、应用场景三、代码示例一、享元模式 享元,可理解为 Python 中的元类、最小粒度的类,系统中存在大量的相似对象时,可以选择享元模式提高资源利用率。 享元具有两种...
    99+
    2022-11-13
  • Python设计模式中的结构型桥接模式
    目录一、桥接模式二、应用场景三、代码示例一、桥接模式 桥接模式,希望能够将一个事物的两个维度分离(解耦),使其都可以独立地变化,并通过桥梁连接起来。 (类)抽象部分(Abstract...
    99+
    2022-11-13
  • Java结构型设计模式中代理模式示例详解
    目录代理模式分类主要角色作用静态代理与动态代理的区别静态代理的基本使用创建抽象主题创建真实主题创建代理主题客户端调用JDK动态代理的基本使用创建抽象主题创建真实主题创建代理主题客户端...
    99+
    2022-11-13
  • .Net结构型设计模式之代理模式怎么实现
    这篇文章主要介绍了.Net结构型设计模式之代理模式怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇.Net结构型设计模式之代理模式怎么实现文章都会有所收获,下面我们一起来看看吧。一、动机(Motivate...
    99+
    2023-06-30
  • 怎么理解设计模式的结构型模式
    这篇文章主要讲解了“怎么理解设计模式的结构型模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解设计模式的结构型模式”吧!认识结构型模式结构型模式所描...
    99+
    2022-10-19
  • Python设计模式中的结构型适配器模式
    目录一、适配器模式二、应用场景三、代码示例方式一方式二一、适配器模式 适配器,顾名思义是一种万能的接口,达到万能转换的效果。 适配器模式,定义一个适配器类,并且在该类中定义了适配器接...
    99+
    2022-11-13
  • PHP结构型模式之代理模式
    目录代理模式的优点代理模式的实现代理模式的使用总结代理模式的优点 代理模式可以保护原对象,控制对原对象的访问;代理模式可以增强原对象的功能,通过代理对象来添加一些额外的功能;代理模式...
    99+
    2023-05-14
    PHP结构型模式之代理模式 PHP代理模式 PHP结构型模式
  • Go语言设计模式之结构型模式
    目录一、组合模式(Composite Pattern)1.1、简述1.2、Go实现二、适配器模式(Adapter Pattern)2.1、简述2.2、Go实现三、桥接模式(Bridg...
    99+
    2022-11-12
  • .Net结构型设计模式之桥接模式(Bridge)
    目录一、动机(Motivation)二、意图(Intent)三、结构(Structure)四、模式的组成五、桥接模式的具体代码实现六、桥接模式的实现要点:1、桥接模式的优点:2、桥接...
    99+
    2022-11-13
  • .Net结构型设计模式之装饰模式(Decorator)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五 、装饰模式的具体代码实现六、装饰模式的实现要点:1、装饰模式的优点:2、装饰...
    99+
    2022-11-13
  • .Net结构型设计模式之组合模式(Composite)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、组合模式的具体代码实现1、透明式的组合模式2、安全式的组合模式六、组合模式的...
    99+
    2022-11-13
  • .Net结构型设计模式之外观模式(Facade)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、外观模式的具体实现六、实现要点:1、外观模式的优点:2、外观模式的缺点:3、...
    99+
    2022-11-13
  • .Net结构型设计模式之享元模式(Flyweight)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、享元模式的具体代码实现六、享元模式的实现要点:1、享元模式的优点2、享元模式...
    99+
    2022-11-13
  • JDK 源码 阅读 - 3 - 设计模式 - 结构型模式
    1.适配器(Adapter)java.util.Arrays$ArrayList(java.util.Arrays#asList()); 这里要特别注意,这里的ArrayList是Arrays的内...
    99+
    2022-10-18
  • .Net结构型设计模式之适配器模式(Adapter)
    目录一、动机(Motivation)二、意图(Intent)三、结构(Structure)1、对象适配器(更常用)2、类适配器(不推荐使用)四、模式的组成五、 适配器模式的具体实现六...
    99+
    2022-11-13
  • Java结构型设计模式之装饰模式详解
    目录介绍实现优缺点介绍 意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更灵活。 主要解决:我们扩展一个类常使用继承方式实现,由于继承为类引入静态特征,...
    99+
    2023-05-14
    Java设计模式装饰模式 Java装饰模式
  • Java结构型设计模式之组合模式详解
    目录组合模式应用场景优缺点主要角色组合模式结构分类透明组合模式创建抽象根节点创建树枝节点创建叶子节点客户端调用安全组合模式创建抽象根节点创建树枝节点创建叶子节点客户端调用组合模式 组...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作