Python实现代理模式

2023-04-03 00:00:00 python 模式 代理

代理模式是一种结构型设计模式,用于控制对对象的访问,可以在不改变原始对象的情况下提供额外的功能,例如权限控制、缓存等。在 Python 中,可以通过类来实现代理模式。

以下是一个简单的示例,演示如何使用代理模式来访问一个网站。假设有一个网站“pidancode.com”,我们想要实现一个代理,用于控制对该网站的访问。

首先,我们需要定义一个接口,即原始对象和代理对象都要实现的接口。在本例中,我们定义了一个名为 Website 的接口,并定义了一个名为 RealWebsite 的类来实现它:

from abc import ABC, abstractmethod

class Website(ABC):
    @abstractmethod
    def display(self):
        pass

class RealWebsite(Website):
    def __init__(self, url):
        self._url = url
        self.load()

    def load(self):
        print("Loading website", self._url)

    def display(self):
        print("Displaying website", self._url)

接下来,我们定义一个代理类 ProxyWebsite,该类将实现 Website 接口。代理类持有一个真实网站的引用,并在访问时进行控制:

class ProxyWebsite(Website):
    def __init__(self, url):
        self._url = url
        self._real_website = None

    def display(self):
        if self._real_website is None:
            self._real_website = RealWebsite(self._url)
        self._real_website.display()

在上面的代码中,我们在代理类的 display 方法中进行了控制,如果真实网站对象不存在,就创建一个并显示它。否则,直接显示真实网站对象。

现在,我们可以使用代理对象来访问网站了:

website = ProxyWebsite("pidancode.com")
website.display()

输出结果:

Loading website pidancode.com
Displaying website pidancode.com

在上面的示例中,我们使用了代理模式来控制对网站的访问,并且不必修改原始网站对象。这使得我们可以添加许多额外的功能,例如权限控制、缓存等,而不必修改原始网站对象的代码。

注意,以上示例是一个非常简单的代理模式实现,只是用来演示如何使用代理模式的基本原理。在实际应用中,代理模式可能会更加复杂和灵活。

相关文章