PartII - 5_代理模式

定义: 代理模式

内容: 为其他对象提供一种代理以控制对 这个对象的访问;

应用场景:
远程代理: 为远程的对象提供代理;
虚代理: 根据需要创建很大的对象;
保护代理: 控制对原始对象的访问, 用于对象有不同访问权限时;

抽象实体: 实体 ; 代理

优点:

远程代理: 可以隐藏对象位于 远程地址空间的事实;
虚代理: 可以进行优化, 根据 要求创建 对象;
保护代理: 允许在访问一个对象时, 有一些 附加的 内务处理;

代码实例

底层代码


from abc import  ABCMeta,  abstractmethod

class  Subject(metaclass = ABCMeta):
      @abstractmethod
      def get_content(self):
          pass

      @abstractmethod
      def  set_content(self, content):
          pass

class  RealSubject(Subject):
     def __init__(self, filename):
         self.filename = filename
         f = open( filename, 'r')
         print(' read file ')
         self.content = f.read()
         f.close()

     def get_content(self):
         return  self.content

     def set_content(self, content):
         f = open( self.filename, 'w')
         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 subj:
              self.subj = RealSubject(self.filename)
          return  self.subj.set_content(content)

class  ProtectedProxy(Subject):
       def __init__(self, filename):
           self.subj = RealSubject(filename)

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


       def set_content(self, content):
           raise PermissionError("write permission limited ")

高层代码


subj = RealSubject("test.txt")
print(subj.get_content())

# subj.get_content()

subj1 = VirtualProxy("test.txt")
print(subj1.get_content())

subj2 = ProtectedProxy("test.txt")
print(subj2.get_content())

subj2.set_content("abc")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值