python-设计模式-代理模式

今天来学习一下代理模式, 代理模式的特点是,不会直接访问真正的对象,而是访问代理对象,从而间接访问到我们真正的对象。所以可以做文章的地方,就是代理对象。

代理对象一般会分为保护性代理,延迟性代理,引用代理。

  • 保护性代理,在我们访问到真正对象之前,会进行一些鉴权操作,或者屏蔽到一些敏感属性。
  • 延迟性代理,延迟性代理的目标是节约资源,变量在访问的时候,才会进行设置,一定程度上节约了内存资源
  • 引用代理,在访问到真正对象之前或者之后,做一些其余的操作,比如计数,计时等,达到了丰富对象的作用

举例子

下面以保护性代理和延迟性代理举例

# @Time : 2022/10/13 13:14 
# @Author : han an min
# @File : ProxyModel.py 
# @Software: PyCharm

class CoconutMilkInfo:

    def __init__(self):
        self.data = "这是重要的椰奶资料,修改需要密码"

    def read(self):
        return self.data

    def reset(self, content):
        self.data = content


class ProtectInfo:
    """
    保护性代理
    用于数据安全的场景
    """

    def __init__(self):
        self.__cm_info = CoconutMilkInfo()

    def read(self):
        return self.__cm_info.data

    def reset(self, content):
        sec = input("请输入密码")
        if sec == "123":
            self.__cm_info.data = content
        else:
            print("你的密码不对,不允许更改")


class LazyProxy:
    """
    延迟代理
    懒加载
    """

    def __init__(self, method):
        self.method = method
        self._method_name = method.__name__

    def __get__(self, obj, cls):
        if not obj:
            return None

        value = self.method(obj)
        setattr(obj, self._method_name, value)
        return value


class CoconutMilkData:

    def __init__(self):
        self.name = "椰奶资料"
        self._data = None

    @LazyProxy
    def data(self):
        print("进行懒加载>>")
        self._data = "懒加载后的数据"
        return self._data


if __name__ == "__main__":
    print(">> 保护数据的Proxy =>>")
    pro_proxy = ProtectInfo()
    print(pro_proxy.read())
    pro_proxy.reset("123")
    print(pro_proxy.read())

    print(">> 懒加载数据的Proxy =>>")
    cm_data = CoconutMilkData()
    print(cm_data.name)
    print(cm_data.data)
    print(cm_data.data)

运行结果 >>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值