脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python设计模式中的结构型桥接模式

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

2022-09-27 11:21范桂飓 Python

这篇文章主要介绍了Python设计模式中的结构型桥接模式,桥接模式即Bridge Pattern,将抽象部分与它的实现部分分离,使它们都可以独立地变化.下面来看看文章的详细内容介绍吧

一、桥接模式

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

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

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

优点:

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

缺点:

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

二、应用场景

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

三、代码示例

实现角色:

  • 抽象(Abstraction
  • 细化抽象(Refined Abstraction
  • 实现者(Implementor
  • 具体实现者(Concrete Implementor
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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桥接模式内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://is-cloud.blog.csdn.net/article/details/122929270

延伸 · 阅读

精彩推荐
  • Python一日一技:在 Python 中实现延迟调用

    一日一技:在 Python 中实现延迟调用

    熟悉 Golang 的同学都知道,Golang 里面有一个关键词叫做defer,它可以实现延迟调用。实际上在 Python 里面也有相关的语法,那就是contextlib.ExitStack。...

    未闻Code6892021-07-28
  • PythonPython 图像处理之PIL库详解用法

    Python 图像处理之PIL库详解用法

    对于图像识别,大量的工作在于图像的处理,处理效果好,那么才能很好地识别,因此,良好的图像处理是识别的基础。在Python中,有一个优秀的图像处理...

    Paranoid8962022-02-23
  • Pythonpandas数值计算与排序方法

    pandas数值计算与排序方法

    下面小编就为大家分享一篇pandas数值计算与排序方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    数据阿伯5512021-01-31
  • Python六个实用的 Python 自动化脚本,你学会了吗?

    六个实用的 Python 自动化脚本,你学会了吗?

    每天你都可能会执行许多重复的任务,例如阅读 pdf、播放音乐、查看天气、打开书签、清理文件夹等等,使用自动化脚本,就无需手动一次又一次地完成这...

    Python七号4872021-11-30
  • PythonDjango中Aggregation聚合的基本使用方法

    Django中Aggregation聚合的基本使用方法

    这篇文章主要给大家介绍了关于Django中Aggregation聚合的基本使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者使用Django具有一定的参考学习...

    lunarian7002020-07-09
  • PythonPython如何配置环境变量详解

    Python如何配置环境变量详解

    今天带大家学习python如何配置环境变量,文中有非常详细的步骤,对正在学习python的小伙伴们有很好地帮助,需要的朋友可以参考下...

    鱼丸丶粗面8742021-11-05
  • Pythontensorflow实现KNN识别MNIST

    tensorflow实现KNN识别MNIST

    这篇文章主要为大家详细介绍了tensorflow实现KNN识别MNIST,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    freedom0984882021-01-21
  • PythonPython中列表的一些基本操作知识汇总

    Python中列表的一些基本操作知识汇总

    这篇文章主要介绍了Python中列表的一些基本操作知识汇总,皆属于Python的基本功,需要的朋友可以参考下 ...

    脚本之家8752020-07-03