前言
桥模式属于属于结构型模式;
如果要开发1个画图工具,需求是画图工具可以画出不同颜色、不同形状的图形;
例如该画图工具可以画出1个红颜色的圆形、绿颜色的长方形。
事物:画图工具画出来的长方形/圆形可以理解为1个事物
多维度:形状和颜色可以理解为2个独立不同的维度
必须要多个维度才可以组成1个事物( X颜色的Y形状的图形)。
一、桥模式
1.概念
将1个事物的2个维度分离,再通过面向对象组合模式将2个类的对象组合起来,使2个维度可以独立变化。
2.角色
抽象(Abstraction)
细化抽象(RefinedAbstraction)
实现者(Implemetor)
具体实现者(ConcreteImplementor)
3.应用场景
当事物有2个以上维度的表现,2个维度都可能扩展时。
4.优点
抽象和实现相分离
优秀的扩展能力
5.代码
from abc import ABC, abstractmethod # 形状维度 class Shape(ABC): # 形状和颜色就可以通过组合的方式耦合在一起了 def __init__(self, color): self.color = color @abstractmethod def draw(self): pass # 颜色维度---抽象 class Color(): @abstractmethod def paint(self, shape): pass # 形状维度---实现 class Rectangle(Shape): name = "长方形" def draw(self): # 代码本身的逻辑需要在实现角色中 self.color.paint(shape=self) class Circle(Shape): name = "圆形" def draw(self): self.color.paint(shape=self) # 颜色维度 class Red(Color): def paint(self, shape): print(f"红色的{shape.name}") class Yellow(Color): def paint(self, shape): print(f"黄色的{shape.name}") if __name__ == '__main__': # 细化实现是颜色的实例 # 细化抽象是形状的实例 shape1 = Rectangle(Red()) shape1.draw() shape2 = Circle(Yellow()) shape2.draw()