前言

桥模式属于属于结构型模式;

如果要开发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()

 

参考

posted on 2024-02-03 21:16  Martin8866  阅读(8)  评论(0编辑  收藏  举报