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

(0)

相关推荐

  • 举例讲解Python中的Null模式与桥接模式编程

    Null模式 我想每个人都有一种经历,为了获取某属性,但是有时候属性是None,那么需要你做异常处理, 而假如你想节省这样的条件过滤的代码,可以使用Null模式以减少对象是否为None的判断 python的例子 我举个不是很通用的例子,只是为了让大家理解这个模式:我有很多类, 但是不是每个类都有类方法test,所以我调用类方法就要做个异常处理,类似这样 class A(object): pass class B(object): b = 1 @classmethod def test(cls):

  • Python设计模式之桥接模式原理与用法实例分析

    本文实例讲述了Python设计模式之桥接模式原理与用法.分享给大家供大家参考,具体如下: 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化. 下面是一个桥接模式的demo: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式--桥接模式 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独

  • 实例解析Python设计模式编程之桥接模式的运用

    我们先来看一个例子: #encoding=utf-8 # #by panda #桥接模式 def printInfo(info): print unicode(info, 'utf-8').encode('gbk') #抽象类:手机品牌 class HandsetBrand(): soft = None def SetHandsetSoft(self, soft): self.soft = soft def Run(self): pass #具体抽象类:手机品牌1 class HandsetBr

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

    目录 一.桥接模式 二.应用场景 三.代码示例 一.桥接模式 桥接模式,希望能够将一个事物的两个维度分离(解耦),使其都可以独立地变化,并通过桥梁连接起来. (类)抽象部分(Abstraction):存在于多个实体中的共同的概念性联系,就是抽象化.作为一个过程,抽象化就是忽略一些信息,从而把不同的实体当做同样的实体对待. (对象)实体部分(Implementation):抽象化给出的具体实现,就是实现化. 简而言之,桥接模式就是指在一个软件系统的抽象化和实现化之间,使用组合/聚合关系而不是继承关

  • Python设计模式中的结构型适配器模式

    目录 一.适配器模式 二.应用场景 三.代码示例 方式一 方式二 一.适配器模式 适配器,顾名思义是一种万能的接口,达到万能转换的效果. 适配器模式,定义一个适配器类,并且在该类中定义了适配器接口,这些适配接口能够将原来由于接口不兼容而不能在一起工作的多种类型进行适配,使得它们能够一同工作. 二.应用场景 三.代码示例 实体角色: 目标接口(Target):定义提供给 Client 访问的接口,可以是一个抽象类或接口,也可以是具体类.待适配的类 / 适配者类(Adaptee):被适配的角色,它们

  • 结合ES6 编写 JavaScript 设计模式中的结构型模式

    目录 前言 什么是设计模式? 结构型设计模式 适配器模式 实例 桥接模式 实例 组合模式 实例 装饰者模式 实例 门面模式 实例 享元模式 实例 代理模式 实例 前言 本文将对 20 多种 JavaScript 设计模式进行简单概述,然后结合 ES6 类的方式来编写实例代码展示其使用方式. JavaScript 在现代前端中扮演重要的角色,相比过去能够做的事情已经不在一个级别上了.JavaScript 最大的特征是其灵活性,一般只要敢想敢写,可以把程序写得很简单,有可以写得很复杂.其灵活性导致编

  • Python设计模式中的创建型工厂模式

    目录 一.工厂模式(Factory Pattern) 二.应用场景 三.编码示例 1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式 一.工厂模式(Factory Pattern) 工厂模式(Factory Pattern),提供了一种实例化(创建)对象的最佳方式. 在工厂模式中,首先定义了一个抽象的工厂类(class Factory),并且在该工厂类中定义了提供了一个通用的.用于实例化对象的 Interface(接口)函数.然后当 Client 想要实例化某个具体的类的对象时,只需要将需求告

  • Python设计模式中的行为型策略模式

    目录 一.策略模式 二.应用场景 三.代码示例 一.策略模式 策略模式中,首先定义了一系列不同的算法,并把它们一一封装起来,然后在策略类中,使这些算法可以相互替换.这意味着,让一个类的行为(算法)可以在类的实例化对象运行时进行更改. 优点: 定义了一系列可重用的算法和行为. 消除了一些条件语句. 可以提供相同行为的不同实现. 缺点: Client 必须了解不同的策略行为细节. 二.应用场景 根据不同的客户属性,采用不同的折扣策略来计算订单中的商品价格: 有 1000 或以上积分的客户,每个订单享

  • Python 设计模式中的创建型建造者模式

    目录 一.建造者模式 二.代码示例 一.建造者模式 建造者模式,顾名思义类似于建筑工人,他们按照有条理的施工顺序(e.g. 打桩 => 浇筑框架 => 砌墙 => 装修)来进行建筑的修建.对于千差万别的建筑,都可以复用同样的施工流程.因为不同的材料.不同设计,可以有不同的表现. 建造者模式,与抽象工厂模式同样用于实例化复杂的对象,主要区别在于: 抽象工厂模式侧重于实例化多个系列的复杂对象. 建造者模式侧重于一步步有序地构造一个复杂对象. 二.代码示例 按照有序的步骤来组装(建造)一个复杂

  • Java结构型设计模式中的适配器模式与桥接模式解析

    适配器模式 定义 适配器模式(英语:adapter pattern)有时候也称包装样式或者包装.将一个类的接口转接成用户所期待的.一个适配使得因接口不兼容而不能在一起工作的类工作在一起. 有两类适配器模式: 1. 对象适配器模式 - 对象适配器通过关联满足用户期待接口,还降低了代码间的不良耦合.在工作中推荐使用"对象适配". 2. 类适配器模式 - 这种适配器模式下,适配器继承自已实现的类(一般多重继承),java中没有多重继承,所以这里不做介绍. 实现 1. Target - 定义C

  • Python设计模式结构型代理模式

    目录 一.代理模式 二.应用场景 三.代码示例 一.代理模式 代理模式,为其他对象提供一种代理,以此控制一个对象的访问方式.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 二.应用场景 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象.这个不同的地址空间可以是在本机器中,也可是在另一台机器中.远程代理又叫做大使(Ambassador).好处是系统可以将网络的细节隐藏起来,使得客户端不必考虑网络的存在. 虚拟

  • Python设计模式结构型组合模式

    目录 一.组合模式 二.应用场景 三.代码示例 一.组合模式 组合,将多个对象组合成为一个树状结构,来表示业务逻辑上的层次.组合模式使得用户对单个对象和组合对象的使用具有一致性. 比如,描述一家公司的层次结构,那么我们用办公室来表示节点,则总经理办公司是根节点,下面分别由人事办公室.业务办公室.生产办公室.财务办公室,每个办公室下面可以还有跟小的办公室,每个办公室都有职责.人员数.人员薪资等属性: 优点: 定义了包含基本对象和组合对象的类层次结构. 简化 Client 代码,即 Client 可

  • Python 设计模式中命令模式

    目录 1.命令模式 2.应用场景 3.代码示例 1.命令模式 命令模式的目的是解耦调用操作的对象(调用者)和提供实现的对象(接收者). 命令模式的思路是在调用者和接收者之间插入一个命令类(Command),该命令类定义了一个 execute 接口,并且该接口实际上是调用了接收者中的具体方法来执行具体命令,以此可以通过扩展命令子类来扩展多个不同的接收者. 这样调用此命令的调用者就和命令接收者之间解耦了. 优势: 封装性好,每个命令都被封装起来,对于客户端来说,需要什么功能就去调用相应的命令,而无需

随机推荐