Python 代理模式讲解和代码示例

简介: Python 代理模式讲解和代码示例

使用示例尽管代理模式在绝大多数 Python 程序中并不常见 但它在一些特殊情况下仍然非常方便 当你希望在无需修改客户代码的前提下于已有类的对象上增加额外行为时 该模式是无可替代的

识别方法代理模式会将所有实际工作委派给一些其他对象 除非代理是某个服务的子类 否则每个代理方法最后都应该引用一个服务对象

概念示例

本例说明了代理设计模式的结构并重点回答了下面的问题

  • 它由哪些类组成
  • 这些类扮演了哪些角色
  • 模式中的各个元素会以何种方式相互关联

main.py: 概念示例

from abc import ABC, abstractmethodclass Subject(ABC):    """    The Subject interface declares common operations for both RealSubject and    the Proxy. As long as the client works with RealSubject using this    interface, you'll be able to pass it a proxy instead of a real subject.    """
    @abstractmethod
    def request(self) -> None:        passclass RealSubject(Subject):    """    The RealSubject contains some core business logic. Usually, RealSubjects are    capable of doing some useful work which may also be very slow or sensitive -    e.g. correcting input data. A Proxy can solve these issues without any    changes to the RealSubject's code.    """
    def request(self) -> None:        print("RealSubject: Handling request.")class Proxy(Subject):    """    The Proxy has an interface identical to the RealSubject.    """
    def __init__(self, real_subject: RealSubject) -> None:        self._real_subject = real_subject
    def request(self) -> None:        """        The most common applications of the Proxy pattern are lazy loading,        caching, controlling the access, logging, etc. A Proxy can perform one        of these things and then, depending on the result, pass the execution to        the same method in a linked RealSubject object.        """
        if self.check_access():            self._real_subject.request()            self.log_access()    def check_access(self) -> bool:        print("Proxy: Checking access prior to firing a real request.")        return True
    def log_access(self) -> None:        print("Proxy: Logging the time of request.", end="")def client_code(subject: Subject) -> None:    """    The client code is supposed to work with all objects (both subjects and    proxies) via the Subject interface in order to support both real subjects    and proxies. In real life, however, clients mostly work with their real    subjects directly. In this case, to implement the pattern more easily, you    can extend your proxy from the real subject's class.    """
    # ...
    subject.request()    # ...if __name__ == "__main__":    print("Client: Executing the client code with a real subject:")    real_subject = RealSubject()    client_code(real_subject)    print("")    print("Client: Executing the same client code with a proxy:")    proxy = Proxy(real_subject)    client_code(proxy)

Output.txt: 执行结果

Client: Executing the client code with a real subject:
RealSubject: Handling request.
Client: Executing the same client code with a proxy:
Proxy: Checking access prior to firing a real request.
RealSubject: Handling request.
Proxy: Logging the time of request.
相关文章
|
6天前
|
Python
Python代码扫描目录下的文件并获取路径
【5月更文挑战第12天】Python代码扫描目录下的文件并获取路径
24 1
|
6天前
|
数据处理 Python
Python 代码中使用。
Python 代码中使用。 z
14 3
|
6天前
|
C++ 开发者 Python
实现Python日志点击跳转到代码位置的方法
本文介绍了如何在Python日志中实现点击跳转到代码位置的功能,以提升调试效率。通过结合`logging`模块的`findCaller()`方法记录代码位置信息,并使用支持点击跳转的日志查看工具(如VS Code、PyCharm),开发者可以从日志直接点击链接定位到出错代码,加快问题排查。
15 2
|
1天前
|
数据采集 XML 程序员
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
|
1天前
|
数据采集 机器学习/深度学习 人工智能
最新用python代码画爱心,来自程序猿的浪漫~_python画爱心代码(1),2024年最新面试简历模板免费
最新用python代码画爱心,来自程序猿的浪漫~_python画爱心代码(1),2024年最新面试简历模板免费
最新用python代码画爱心,来自程序猿的浪漫~_python画爱心代码(1),2024年最新面试简历模板免费
|
1天前
|
测试技术 开发工具 iOS开发
Python如何快速定位最慢的代码?_pycharm找到执行时间长的代码(2)
Python如何快速定位最慢的代码?_pycharm找到执行时间长的代码(2)
Python如何快速定位最慢的代码?_pycharm找到执行时间长的代码(2)
|
1天前
|
数据采集 数据挖掘 测试技术
Python如何快速定位最慢的代码?_pycharm找到执行时间长的代码(1)
Python如何快速定位最慢的代码?_pycharm找到执行时间长的代码(1)
Python如何快速定位最慢的代码?_pycharm找到执行时间长的代码(1)
|
1天前
|
数据采集 数据挖掘 Python
最全妙不可言。写出优雅的 Python 代码的七条重要技巧,2024年最新被面试官怼了还有戏吗
最全妙不可言。写出优雅的 Python 代码的七条重要技巧,2024年最新被面试官怼了还有戏吗
|
1天前
|
Python
2024年Python最新刷爆全网的动态条形图,原来5行Python代码就能实现!,2024年最新Python面试必问的HashMap
2024年Python最新刷爆全网的动态条形图,原来5行Python代码就能实现!,2024年最新Python面试必问的HashMap
2024年Python最新刷爆全网的动态条形图,原来5行Python代码就能实现!,2024年最新Python面试必问的HashMap
|
1天前
|
存储 缓存 API
python源码解读_python代码解释
python源码解读_python代码解释