Python 设计模式: 桥接模式(bridge pattern)

桥接模式用于将"抽象"(abstraction, 比如接口或算法)与实现方式相分离。

如果不用桥接模式,那么通常的做法是,创建若干个基类用于表示各个抽象方式, 然后从每个基类中继承出两个或多个子类,用于表示对这种抽象方式的不同实现方法。 用了桥接模式之后,我们需要创建两套独立的"类体系"(class hierarchy): "抽象体系" 定义了我们所要执行的操作(比如接口或高层算法),而“实现体系”则包含具体实现方式, 抽象体系要调用实现体系以完成其操作。抽象体系中的类会把实现体系中的某个类实例 聚合进来,而这个实例将充当抽象接口与具体实现之间的桥梁(bridge)。

class OSSClient:
    def __init__(self, ...):
        self._client = OSS(...)

    def url_to_path(self, url):
        path = ...
        return path

    def get_content(self, path):
        content = self._client.get_data(path, ...)
        return content

    def put_content(self, path, content):
        self._client.put_data(path, content)


class Downloader:
    def __init__(self, client):
        self._client = client

    def download(url, local_path):
        with open(local_path, 'wb') as fp:
            remote_path = self._client.url_to_path(url)
            data = self._client.get_content(remote_path)
            fp.write(data)

上面的 OSSClient 即为实现体系类, Downloader 是抽象体系类:

抽象体系中的类(Downloader)会把实现体系中的某个类(OSSClient)实例 聚合进来,而这个实例将充当抽象接口与具体实现之间的桥梁(bridge)。


Comments