Python 设计模式 — 结构型模式 — 桥接模式
Posted 范桂飓
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 设计模式 — 结构型模式 — 桥接模式相关的知识,希望对你有一定的参考价值。
目录
文章目录
桥接模式
桥接模式,希望能够将一个事物的两个维度分离(解耦),使其都可以独立地变化,并通过桥梁连接起来。
- (类)抽象部分(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()
以上是关于Python 设计模式 — 结构型模式 — 桥接模式的主要内容,如果未能解决你的问题,请参考以下文章