python 桥接模式(Bridge Pattern)

2023-04-03 00:00:00 python 模式 桥接

桥接模式(Bridge Pattern)是一种结构型设计模式,用于将一个大类或一系列紧密相关的类拆分成抽象和实现两个独立的层次结构,从而能够在两个层次之间独立地变化。

在桥接模式中,抽象部分负责定义接口,并保存一个实现部分的引用,而实现部分负责实现这个接口。

下面是一个使用桥接模式的简单示例,假设我们有两个不同的类:DataSource和Formatter。DataSource负责读取数据,而Formatter负责将数据格式化为不同的输出格式,如字符串或XML。使用桥接模式,我们可以将这两个概念分离并使其可以独立变化,如下所示:

# 抽象部分
class DataSource:
    def __init__(self, impl):
        self._impl = impl

    def get_data(self):
        return self._impl.get_data()

# 实现部分
class FileDataSource:
    def get_data(self):
        return "Data from file"

class ApiDataSource:
    def get_data(self):
        return "Data from API"

# 抽象部分
class Formatter:
    def __init__(self, impl):
        self._impl = impl

    def format_data(self, data):
        return self._impl.format_data(data)

# 实现部分
class StringFormatter:
    def format_data(self, data):
        return str(data)

class XmlFormatter:
    def format_data(self, data):
        return "<data>{}</data>".format(data)

# 使用
file_source = DataSource(FileDataSource())
api_source = DataSource(ApiDataSource())
string_formatter = Formatter(StringFormatter())
xml_formatter = Formatter(XmlFormatter())

# 输出数据
print(string_formatter.format_data(file_source.get_data()))
print(xml_formatter.format_data(api_source.get_data()))

在上面的代码中,DataSource和Formatter是抽象部分,它们定义了接口并保存了对实现部分的引用。FileDataSource和ApiDataSource是实现部分,它们实现了数据源接口。StringFormatter和XmlFormatter也是实现部分,它们实现了格式化器接口。

通过使用桥接模式,我们可以将数据源和格式化器的实现解耦,并在两个层次之间独立变化。例如,如果我们想要添加一种新的数据源或格式化器,只需要实现相应的接口并在初始化时传递给抽象部分即可。

相关文章