设计模式之:代理模式

前言

代理模式的本质就是隐藏真实角色信息,实现间接接触。比如我们平常在租房时会找中介,中介就相当于一个代理,房东和租户直接联系的都是中介。

代理模式有3个必要的元素:

  • 真实的对象(执行业务逻辑,被代理的对象)
  • 代理类(用户请求的一个接口,对真实目标的保护)
  • 用户(获取任务的用户请求)

代理模式的应用场景:

1.远程代理:也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。

2.虚拟代理:是根据需要创建开销大的对象。通过它来存放实例化需要很长时间的真实对象,例如html中,图片需要load很久,所以通过虚拟代理来代替真实的图片

3.安全代理:用来控制真实对象访问时的权限

代码 :

'''代理模式'''
#本质:隐藏真实角色信息,实现间接接触
from abc import abstractmethod
class FemaleA():
      def __init__(self,name):
            self.name = name

class Male():
      @abstractmethod
      def send_flower(self):
            pass
      
      @abstractmethod
      def send_choclate(self):
            pass
      
      @abstractmethod
      def send_book(self):
            pass
      
class Male_hidden(Male):
      def __init__(self,name,love_female):
            self.name = name
            self.love_female = FemaleA(love_female)

      def send_flower(self):
            print("%s送花给%s"%(self.name,self.love_female.name))

      def send_choclate(self):
            print("%s送巧克力给%s"%(self.name,self.love_female.name))

      def send_book(self):
            print("%s送书给%s"%(self.name,self.love_female.name))

class Proxy(Male):
      '''代理类,同时拥有真实对象和用户的信息'''
      def __init__(self,name,proxyed_name,love_female):
            self.name = name
            self.proxyed = Male_hidden(proxyed_name,love_female)

      def send_flower(self):
            self.proxyed.send_flower()

      def send_choclate(self):
            self.proxyed.send_choclate()

      def send_book(self):
            self.proxyed.send_book()

if __name__ == "__main__":
      p = Proxy('张三','李四','美女')
      p.send_flower()
      p.send_choclate()
      p.send_book()

执行结果: 

最终执行的还是真实角色的方法,只是调用者是看不到的,实现了真实角色信息的隐藏。 

参考连接:

https://www.cnblogs.com/Xjng/p/3878839.html

猜你喜欢

转载自blog.csdn.net/kongsuhongbaby/article/details/84350944