代理模式

简介: 代理模式是一种结构型设计模式,通过代理对象控制对真实对象的访问,适用于权限控制、延迟加载和日志记录等场景。它在不修改原对象的基础上增强功能,提升系统安全性与性能,但可能增加复杂性和轻微性能开销。

代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理模式通常用于以下几种场景:

控制访问:通过代理控制对真实对象的访问,可以添加权限验证等逻辑。
延迟加载:在需要时才加载和初始化资源,节省系统资源。
记录日志:在调用真实对象的方法时,可以在代理中记录日志信息。

  1. 代理模式的结构
    代理模式通常包含以下几个角色:

主题接口(Subject):定义真实对象和代理对象的共用接口。
真实主题(RealSubject):实现了主题接口,代表实际的对象。
代理(Proxy):维护对真实主题的引用,并控制对其的访问。

  1. 代理模式的 UML 图
    plaintext
    +------------------+
    | Subject |
    +------------------+
    | + request() |
    +------------------+
           ^
           |
    
    +-------+-------+
    | |
    +-------------------+ +-------------------+
    | RealSubject | | Proxy |
    +-------------------+ +-------------------+
    | + request() | | + request() |
    +-------------------+ +-------------------+
  2. 代理模式的实现
    以下是一个 Python 中代理模式的简单示例:

3.1 定义主题接口
python
from abc import ABC, abstractmethod

class Subject(ABC):
@abstractmethod
def request(self):
pass
3.2 实现真实主题
python
class RealSubject(Subject):
def request(self):
print("RealSubject: Handling request.")
3.3 实现代理
python
class Proxy(Subject):
def init(self, real_subject: RealSubject):
self._real_subject = real_subject

def request(self):
    # 在代理中可以添加额外的逻辑
    print("Proxy: Logging before calling RealSubject.")
    self._real_subject.request()
    print("Proxy: Logging after calling RealSubject.")

3.4 使用代理模式
python
if name == "main":

# 创建真实主题
real_subject = RealSubject()

# 创建代理
proxy = Proxy(real_subject)

# 使用代理来处理请求
proxy.request()
  1. 代理模式的优缺点
    优点
    控制访问:代理可以控制对真实对象的访问,可以增加安全性和权限管理。
    提高性能:可以通过延迟加载等方式提高系统的性能,尤其是在处理大对象或远程对象时。
    增强功能:可以在不修改真实对象的情况下增强其功能,比如添加日志、监控等功能。
    缺点
    增加复杂性:代理模式会引入新的类和层次结构,可能使系统变得更加复杂。
    性能开销:在某些情况下,代理的引入可能会导致性能损失,因为每个请求都需要经过代理。
  2. 何时使用代理模式
    当需要控制对某个对象的访问时,例如需要添加权限控制或日志记录。
    当对象的创建或访问开销较大,且希望实现延迟加载时。
    当需要在不改变真实对象的情况下增加额外功能时。
  3. 总结
    代理模式是一种灵活的设计模式,可以通过引入代理对象来增强系统的功能和安全性。它适用于需要控制访问、延迟加载以及记录日志等场景。在实际开发中,合理运用代理模式可以帮助简化系统设计,提高模块的可重用性和扩展性。
相关文章
|
2月前
|
存储 编解码 人工智能
阿里云服务器2核4G和4核8G租用价格:不同实例收费价格标准及最新活动价格
阿里云服务器提供2核4G与4核8G多种实例规格,价格从9.9元/月起,企业用户享199元/年特惠,满足不同性能需求。实例包括经济型e实例、通用算力型u1/u2i/u2a实例、计算型c9i实例等,适用于轻量级应用到企业级通用应用、视频处理、AI训练等多种场景。用户可根据业务需求选择实例规格与计费模式,长期使用建议包年包月。阿里云还提供优惠券和补贴活动,进一步降低成本,适合不同负载和预算的用户。
600 3
|
4月前
|
人工智能 前端开发 安全
一文讲解与Agent前端发展相关的几个阶段和协议
本文梳理了Agent前端协议从“胶水代码”到标准化的演进历程。解析了MCP、MCPApps、A2A、AG-UI及A2UI在能力、协作、通信与呈现架构中的核心作用。通过深度集成,前端正实现AI能力的富交互呈现,推动人机交互走向“可见、可控、可信”。
703 4
|
6月前
|
机器学习/深度学习 并行计算 PyTorch
阿里云国际站gpu服务器能干什么?阿里云国际站gpu服务器怎么搭建?
阿里云国际站gpu服务器能干什么?阿里云国际站gpu服务器怎么搭建?
256 6
|
6月前
|
存储 缓存 人工智能
图索引性能提升 400%:详解 VSAG 向量检索框架
VSAG 是蚂蚁集团开源的图索引向量检索框架。 本文源自 VSAG 团队在 VLDB'25 发表的《VSAG: An Optimized Search Framework for Graph-based Approximate Nearest Neighbor Search》,介绍 VSAG 框架如何通过缓存优化、自动调参和距离计算加速,在保证高召回率前提下将检索性能提升最高 400%。
|
安全 生物认证 网络安全
HTTP 常见认证方式
HTTP 常见认证方式
600 0
|
10月前
|
安全 API 数据安全/隐私保护
|
机器学习/深度学习 存储 Kubernetes
【重磅发布】AllData数据中台核心功能:机器学习算法平台
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
存储 人工智能 安全
【荣誉奖项】荣获2024数据治理优秀产品!瓴羊Dataphin联合DAMA发布数据管理技能认证
瓴羊Dataphin连续俩年获得DAMA年度优秀数据治理产品奖,本次与DAMA联合发布“DAMA x 瓴羊 数据管理技能认证”,助力提升全民数据素养。
805 0
【荣誉奖项】荣获2024数据治理优秀产品!瓴羊Dataphin联合DAMA发布数据管理技能认证
|
存储 人工智能 搜索推荐

热门文章

最新文章