结构型设计模式 - 桥接模式
2018-09-09 本文已影响0人
千反田爱瑠爱好者
- 桥接模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化;
- 类似于多继承方案,但多继承方案会违背了类的单一职责原则(一个类只有一个变化),复用性不好;
- 桥接模式在以下情况适用:
i. 一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系;
ii. 设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的;
iii. 一个构件有多于一个的抽象化角色和实现化角色,系统需要它们之间进行动态耦合;
iv. 虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。
class AbstractRoad(object): # 公路基类
car = None
class AbstractCar(object): # 车辆基类
def run(self):
pass
class Street(AbstractRoad): # 市区街道
def run(self):
self.car.run()
print("在市区街道上行驶")
class SpeedWay(AbstractRoad): # 高速公路
def run(self):
self.car.run()
print("在高速公路上行驶")
class Car(AbstractCar): # 小汽车
def run(self):
print("小汽车")
class Bus(AbstractCar): # 公共汽车
def run(self):
print("公共汽车")
if __name__ == "__main__":
# 路、车两个维度各自修改产生的变化相互不影响
road1 = SpeedWay()
road1.car = Car()
road1.run()
road2 = SpeedWay()
road2.car = Bus()
road2.run()