欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python设计模式中的结构型桥接模式

程序员文章站 2021-11-26 18:17:21
目录一、桥接模式二、应用场景三、代码示例一、桥接模式桥接模式,希望能够将一个事物的两个维度分离(解耦),使其都可以独立地变化,并通过桥梁连接起来。(类)抽象部分(abstraction):存在于多个实...

一、桥接模式

桥接模式,希望能够将一个事物的两个维度分离(解耦),使其都可以独立地变化,并通过桥梁连接起来。

  • (类)抽象部分(abstraction):存在于多个实体中的共同的概念性联系,就是抽象化。作为一个过程,抽象化就是忽略一些信息,从而把不同的实体当做同样的实体对待。
  • (对象)实体部分(implementation):抽象化给出的具体实现,就是实现化。
  • 简而言之,桥接模式就是指在一个软件系统的抽象化和实现化之间,使用组合/聚合关系而不是继承关系,从而使两者可以相对独立地变化。

桥接模式的核心思想是通过封装,将一个抽象类的相关参数和方法分别作为桥接类的属性,这样在实例化桥接类的对象后,通过修改桥接类的属性,便可以实现抽象和实现之间的独立变化。

优点:

  • 抽象角色与实现角色相分离,二者可以独立设计,不受约束;
  • 扩展性强,抽象角色和实现角色可以非常灵活地扩展。

缺点:

  • 增加对系统的理解难度。

二、应用场景

Python设计模式中的结构型桥接模式

三、代码示例

实现角色:

  • 抽象(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设计模式中的结构型桥接模式的文章就介绍到这了,更多相关python桥接模式内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!