1 | 2 |
---|---|
定义 | 将抽象部分与实现部分解耦,使它们都可以独立的变化 |
角色 | 抽象(Abstraction):Shape 细化抽象(RefnedAbstraction) :长方形,圆形 实现者(implementor):Color 具体实现者(ConcreImplementor):红色,蓝色 |
优点 | 1.抽象和实现的分离.2,优秀的扩展能力, 3,实现细节对客户透明。 |
缺点 | 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程 |
应用场景 | 1,如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系 2,对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用 3,一个类存在两个独立变化的维度,且这两个维度都需要进行扩展 |
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from abc import ABCMeta, abstractmethod
# 抽象者
class Shape(metaclass=ABCMeta):
# 聚合关联关系:与颜色进行关联
def __init__(self, color):
self.color = color
@abstractmethod
def draw(self):
pass
# 细化抽象
class Rectangle(Shape):
name = "长方形"
def draw(self):
self.color.paint(self)
class Circle(Shape):
name = "圆形"
def draw(self):
self.color.paint(self)
# 实现者
class Color(metaclass=ABCMeta):
@abstractmethod
def paint(self, shape):
pass
# 具体实现者
class Red(Color):
def paint(self, shape):
print("红色的%s" % shape.name)
class Black(Color):
def paint(self, shape):
print("黑色的%s" % shape.name)
if __name__ == '__main__':
rect = Rectangle(Red())
rect.draw()