Python桥接模式
范桂飓 人气:0一、桥接模式
桥接模式,希望能够将一个事物的两个维度分离(解耦),使其都可以独立地变化,并通过桥梁连接起来。
- (类)抽象部分(Abstraction):存在于多个实体中的共同的概念性联系,就是抽象化。作为一个过程,抽象化就是忽略一些信息,从而把不同的实体当做同样的实体对待。
- (对象)实体部分(Implementation):抽象化给出的具体实现,就是实现化。
- 简而言之,桥接模式就是指在一个软件系统的抽象化和实现化之间,使用组合/聚合关系而不是继承关系,从而使两者可以相对独立地变化。
桥接模式的核心思想是通过封装,将一个抽象类的相关参数和方法分别作为桥接类的属性,这样在实例化桥接类的对象后,通过修改桥接类的属性,便可以实现抽象和实现之间的独立变化。
优点:
- 抽象角色与实现角色相分离,二者可以独立设计,不受约束;
- 扩展性强,抽象角色和实现角色可以非常灵活地扩展。
缺点:
- 增加对系统的理解难度。
二、应用场景
三、代码示例
实现角色:
- 抽象(
Abstraction
) - 细化抽象(
Refined Abstraction
) - 实现者(
Implementor
) - 具体实现者(
Concrete Implementor
)
import abc # 抽象 class Mobile(metaclass=abc.ABCMeta): def __init__(self, cover): self.cover = cover @abc.abstractmethod def buy(self): pass # 实现者 class Cover(metaclass=abc.ABCMeta): @abc.abstractmethod def put(self): pass # 细化抽象 class Xiaomi(Mobile): def buy(self): self.cover.put(self) # 细化抽象 class Huawei(Mobile): def buy(self): self.cover.put(self) # 细化抽象 class Iphone(Mobile): def buy(self): self.cover.put(self) # 具体实现者 class YellowCover(Cover): def put(self, mobile): print(f"套着{self.__class__.__name__}的{mobile.__class__.__name__}") # 具体实现者 class RedCover(Cover): def put(self, mobile): print(f"套着{self.__class__.__name__}的{mobile.__class__.__name__}") # 具体实现者 class GreenCover(Cover): def put(self, mobile): print(f"套着{self.__class__.__name__}的{mobile.__class__.__name__}") if __name__ == "__main__": red_xiaomi = Xiaomi(RedCover()) red_xiaomi.buy() green_huawei = Huawei(GreenCover()) green_huawei.buy() red_huawei = Huawei(RedCover()) red_huawei.buy() yellow_iphone = Iphone(YellowCover()) yellow_iphone.buy()
加载全部内容