1. 桥接模式(Bridge)介绍

UML类图


桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。

意图

将抽象部分与实现部分分离,使它们都可以独立的变化。

优点

  • 抽象和实现的分离。
  • 优秀的扩展能力。
  • 实现细节对客户透明。

缺点

桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

使用场景

  • 如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。
  • 对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。
  • 一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

2. 示例

'''Bridge Pattern with Python Code
'''from abc import abstractmethod, ABCMetaclass AbstractRoad(metaclass=ABCMeta):car = Noneclass AbstractCar(metaclass=ABCMeta):@abstractmethoddef run(self):raise NotImplementedErrorclass 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("公共汽车在")class Client(object):def main(self):# 小汽车在高速上行驶road1 = SpeedWay()road1.car = Car()road1.run()# 公交车在高速上行驶road2 = SpeedWay()road2.car = Bus()road2.run()# 小汽车在市区街道行驶road3 = Street()road3.car = Bus()road3.run()if __name__ == "__main__":Client().main()

输出:

 # ./Bridge.py
小汽车在
在高速公路上行驶
公共汽车在
在高速公路上行驶
公共汽车在
在市区街道上行驶

参考:
https://www.cnblogs.com/adamjwh/p/9033548.html
https://www.cnblogs.com/houleixx/archive/2008/02/23/1078877.html
https://www.cnblogs.com/ydf0509/p/9652128.html

python设计模式7-桥接模式相关推荐

  1. Python设计模式-装饰器模式

    Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...

  2. Python设计模式-中介者模式

    Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...

  3. Python设计模式-职责链模式

    Python设计模式-职责链模式 代码基于3.5.2,代码如下; #coding:utf-8 #职责链模式class Handler():def __init__(self):self.success ...

  4. Python设计模式-享元模式

    Python设计模式-享元模式 基于Python3.5.2,代码如下 #coding:utf-8class Coffee:name = ""price = 0def __init_ ...

  5. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  6. java桥接和装饰_设计模式:桥接模式和装饰模式

    原标题:设计模式:桥接模式和装饰模式 一.桥接模式简介 1.基础描述 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥梁模式的用意是&qu ...

  7. C++设计模式之桥接模式

    这篇文章主要介绍了C++设计模式之桥接模式,本文讲解了什么是桥接模式.为什么要使用桥接模式.什么时候使用桥接模式等内容,需要的朋友可以参考下 问题描述 现在要去画一个图形,图形有长方形.圆形和扇形等等 ...

  8. python策略模式包含角色_详解Python设计模式之策略模式

    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...

  9. php设计模式之桥接模式

    php设计模式之桥接模式 一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 其实就是讲不相关的东西通过类(本例中是SendInfo)结合在一起,从而 ...

  10. java 懒加载模式_JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载

    我写的程序员面试系列文章 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Jav ...

最新文章

  1. 二级list列表python_Python 基本语法(二) —— 列表 (list)
  2. 刷固件Layer1到手机FLASH(硬刷)
  3. ML之回归预测:以某个数据集为例从0到1深入理解科学预测之回归(实数值年龄预测)问题的思路框架
  4. 4、使用PreparedStatement接口实现增,删,改操作(常用)
  5. s:iterator标签的使用
  6. 【ZOJ - 3872】Beauty of Array(思维,计算贡献,枚举)
  7. Spark内置图像数据源初探
  8. 第四次作业:个人项目-小学四则运算 “软件”之初版
  9. 历史上有过哪些有名的神级显卡?
  10. lua游戏脚本实例源码_Lua脚本引擎教程(六):饥荒Lua脚本系统
  11. CocoaLumberjack+XcodeColor(输出带有颜色的日志)在安装过程中遇到的问题
  12. ubuntu 安装及相关软件安装(1)
  13. 【模拟信号】基于matlab标准调幅信号产生+解调【含Matlab源码 984期】
  14. 基于web的库存管理系统
  15. 常犇_武汉大学管理学院2019年工商管理硕士(MBA)第三批复试通知
  16. 计算机应用责编处理录用几率大吗,等待责编处理是什么意思
  17. [数据仓库]分层概念,ODS,DM,DWD,DWS,DIM的概念
  18. 尚学堂视频笔记二:面向对象深入
  19. # 公有云?私有云?混合云?多云?行业云?傻傻分不清楚(下篇)
  20. PADS2007下快速布局布线PCB_本人总结

热门文章

  1. ASP.NET抓取网页内容
  2. 25+ 个单色背景的网页设计实例
  3. HOWTO: Create and submit your first Linux kernel patch using GIT
  4. google站长管理工具
  5. MCSE第六课-DHCP
  6. 协议编码分析 - ARP协议详解
  7. 对于公司来说,企业内训是否真的有必要?
  8. Java知识点总结(Java容器-ArrayList)
  9. oracle数据库从入门到精通
  10. easyui的validatebox重写自定义验证规则的几个实例