代理模式(python)

本文介绍了Python中的代理模式,重点讨论了代理如何在调用真实对象时执行额外操作,如跟踪引用次数、锁定机制等。同时,提到了相关类图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代理模式(Proxy):为某个对象提供一种代理以控制对这个对象的访问。
注意:代理模式和策略模式的类图很相近,实现方法也是一样的,但是应用场景很不一样,体现了不同的思想。
    策略模式中同一外部对象访问上下文对象的操作一样,但是里面的策略对象不同
    代理模式中不同的外部对象访问代理对象的操作一样,但是里面的真实对象是一样的
    
代理模式在访问对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途
应用场景
1、远程代理。为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
2、虚拟代理。当要创建耗时很长的对象时,可以使用虚拟代理。虚拟代理完成的工作为新建真实对象,并在新建的过程中给出提示。比如在网页加载图片的过程中,虚拟代理可以用一个图片框暂时替代真实的图片。
3、安全代理。用于控制真实对象访问是的权限。

4、智能指引。当调用真实的对象时,代理处理另外一些事情,比如计算真实对象的引用次数、是否锁定等等。

#encoding=utf-8
#
#by panda
#代理模式

def printInfo(info):
    print unicode(info, 'utf-8').encode('gbk')

class SchoolGirl():
    Name = ''
    def __init__(self, name):
        self.Name = name
    
class GiveGift():
    """接口类:定义通用操作"""
    def GiveDolls(self):
        return
    
    def GiveFlowers(self):
        return
    
    def GiveChocolate(self):
        return
    
class Pursuit(GiveGift):
    mm = None
    def __init__(self, mm):
        self.mm = mm;
        return;
    
    def GiveDolls(self):  
        printInfo("代理模式:")
        printInfo("送 %s 洋娃娃" % self.mm.Name)      
        return
    
    def GiveFlowers(self):
        printInfo("代理模式:")
        printInfo("送 %s 鲜花" % self.mm.Name)      
        return
    
    def GiveChocolate(self):
        printInfo("代理模式:")
        printInfo("送 %s 巧克力" % self.mm.Name)        
        return
    

class Proxy(GiveGift):
    gg = None
    def __init__(self, mm):
        self.gg = Pursuit(mm);
        return;
    
    def GiveDolls(self):  
        self.gg.GiveDolls()
        return
    
    def GiveFlowers(self):
        self.gg.GiveFlowers()
        return
    
    def GiveChocolate(self):
        self.gg.GiveChocolate()
        return
    
    


def clientUI():
    mm = SchoolGirl(r"韩梅梅")
    proxy = Proxy(mm)
    proxy.GiveDolls()
    proxy.GiveFlowers()
    proxy.GiveChocolate()
    return

if __name__ == '__main__':
    clientUI();


类图




代理模式是一种结构型设计模式,它允许通过在对象之间添加一个代理对象来控制对原始对象的访问。代理对象可以充当原始对象的接口,向客户端提供简单的访问方式,同时隐藏了原始对象的复杂性。 在Python中,可以使用类来实现代理模式。例如,可以定义一个代理类来控制对原始类的访问,以便在必要时添加额外的逻辑或限制访问。 以下是一个简单的示例代码,其中包括一个接口类、一个实现类和一个代理类: ``` # 接口类 class Subject: def request(self): pass # 实现类 class RealSubject(Subject): def request(self): print("RealSubject: Handling request.") # 代理类 class Proxy(Subject): def __init__(self, real_subject: RealSubject) -> None: self._real_subject = real_subject def request(self): 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.") ``` 在上述代码中,`Subject`是一个接口类,定义了一个`request`方法,用于请求处理。`RealSubject`是实现类,实现了`Subject`接口,并重写了`request`方法。`Proxy`是代理类,继承自`Subject`接口,并包含一个指向`RealSubject`对象的引用。当客户端调用代理对象的`request`方法时,代理对象会检查是否有权限访问实际对象,并记录访问时间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值