首页 > 其他分享 >设计模式--桥接模式(Bridge Pattern)

设计模式--桥接模式(Bridge Pattern)

时间:2024-02-11 21:56:10浏览次数:26  
标签:Bridge Implementor 桥接 接口 实现 Abstraction 抽象 设计模式

桥接模式(Bridge Pattern)是一种结构型设计模式,它主要是用于将抽象部分与实现部分分离,使它们可以独立地变化。
桥接模式主要包含以下几个角色:

  1. Abstraction(抽象类):定义抽象类的接口,它维护对Implementor的引用。
  2. RefinedAbstraction(扩充抽象类):扩充由Abstraction定义的接口。
  3. Implementor(实现类接口):定义实现类的接口,该接口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同。
  4. ConcreteImplementor(具体实现类):具体实现Implementor接口,在不同的ConcreteImplementor中提供基本操作的不同实现。

桥接模式的主要优点是:

  • 分离抽象接口及其实现部分:提供抽象和实现之间的桥梁结构,而这个桥梁就是该模式的核心——抽象和实现分离,这也是桥接模式的主要特点。
  • 提高了系统的可扩充性:抽象和实现可以独立扩展,不会相互影响,由于程序的抽象化,增加系统功能方便。
  • 实现细节对客户透明,可以对用户隐藏实现细节。
    桥接模式适用于以下场景:
  • 当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。
  • 当一个系统不希望使用继承或因为多层继承导致系统类的个数急剧增加时。
  • 当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。

以下是一个简单的C++实现的桥接模式(Bridge Pattern)示例:

#include <iostream>

// 实现部分的抽象
class Implementor {
public:
    virtual void operationImpl() = 0;
    virtual ~Implementor() {}
};

// 具体实现A
class ConcreteImplementorA : public Implementor {
public:
    void operationImpl() override {
        std::cout << "Concrete Implementor A operation..." << std::endl;
    }
};

// 具体实现B
class ConcreteImplementorB : public Implementor {
public:
    void operationImpl() override {
        std::cout << "Concrete Implementor B operation..." << std::endl;
    }
};

// 抽象部分
class Abstraction {
public:
    Abstraction(Implementor* impl) : impl_(impl) {}
    virtual void operation() {
        impl_->operationImpl();
    }
    virtual ~Abstraction() { delete impl_; }

private:
    Implementor* impl_;
};

// 扩展抽象部分
class RefinedAbstraction : public Abstraction {
public:
    RefinedAbstraction(Implementor* impl) : Abstraction(impl) {}
    void operation() override {
        std::cout << "Refined ";
        Abstraction::operation();
    }
};

int main() {
    Abstraction* abstractionA = new RefinedAbstraction(new ConcreteImplementorA());
    abstractionA->operation();

    Abstraction* abstractionB = new RefinedAbstraction(new ConcreteImplementorB());
    abstractionB->operation();

    delete abstractionA;
    delete abstractionB;

    return 0;
}

在这个例子中,Implementor是实现部分的抽象,定义了operationImpl接口。ConcreteImplementorA和ConcreteImplementorB是具体实现,实现了operationImpl接口。
Abstraction是抽象部分,它维护了一个对实现部分的引用,这个引用可以是抽象实现类,也可以是具体实现类。在operation接口中,抽象部分会调用实现部分的operationImpl接口。
RefinedAbstraction是扩展抽象部分,它继承了抽象部分,并可以添加新的接口。
通过这种方式,我们可以将抽象部分和实现部分分离,使它们可以独立地变化。

帮助理解:
可以使用”毛笔“ 与 ”蜡笔“ 做比喻。
”大小“和”颜色“ 是两个独立变化的维度。
例如,大小型号有 小 中 大,颜色有3种 红 蓝 黄。
对于毛笔,自带大小属性,增加一支毛笔,结合颜色,有多少种颜色,就有多少种画笔使用方式。
对于蜡笔,大小和颜色耦合在一起,要想达到与毛笔一样的效果,有多少种颜色,就需要增加多少个蜡笔。

标签:Bridge,Implementor,桥接,接口,实现,Abstraction,抽象,设计模式
From: https://www.cnblogs.com/lanyangsh/p/18013554

相关文章

  • 设计模式
    设计模式创建一个接口;publicinterfaceShape{voiddraw();}创建实现接口的实体类;publicclassRectangleimplementsShape{@Overridepublicvoiddraw(){System.out.println("InsideRectangle::draw()method.");}}创建一个工厂......
  • Python实现软件设计模式10:装饰器模式 Decorator Pattern
    概念是一种对象结构型模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为是一种用于替代继承的技术,他通过一种无须定义子类的方式给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增......
  • 设计模式-模板方法模式(Template Method Pattern)
    #模板方法模式(TemplateMethodPattern)-记忆关键字:模板方法-定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤-类型:行为型-![UML类图](./design-pattern.png)##1.涉及的角色1)Abstr......
  • Python实现软件设计模式9:组合模式 Composite Pattern
    动机如何将容器和叶子进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器和叶子?典型案例如:文件系统,在树形目录结构中,包含文件和文件夹两类不同的元素;在文件夹中可以继续包含文件或子文件夹,在文件中不能再包含子文件或者子文件夹。概念组合多个对象形成树形......
  • 汉字拼音桥接交流与传承的关键
    汉字拼音,一种基于拉丁字母为汉字标注读音的发音指导系统,自20世纪50年代推广以来便成为学习汉语的基石。这种独特的拼写系统不仅在汉语的教育与学习领域起到不可替代的作用,而且对文化的传承、科技的进步以及国际交流都产生了深远的影响。汉字拼音|一个覆盖广泛主题工具的......
  • TypeScript 设计模式之发布订阅者模式
    订阅发布模式(Publish-SubscribePattern)是一种行之有效的解耦框架与业务逻辑的方式,也是一种常见的观察者设计模式,它被广泛应用于事件驱动架构中。在这个模式中,发布者(或者说是主题)并不直接发送消息给订阅者,而是通过调度中心(或者叫消息代理)来传递消息。发布者(或者说是主题)并不知道订......
  • 【设计模式】建造者模式——OkHttp源码中的建造者模式
    OkHttp源码中的建造者模式之所以有必要单独拿出来讲,是因为OkHttp3.x和4.x分别用Java语言和Kotlin语言写的,所以需要做一个对比分析。在OkHttp的源码中搜索“Builder”,可以看到OkHttp的OkHttpClient、Request和Response等很多类的代码里包含名为Builder的子类,这些都是建造者模式的应......
  • 设计模式:适配器模式
    设计模式是通用的、可复用的代码设计方案,也可以说是针对某类问题的解决方案,因此,掌握好设计模式,可以帮助我们编写更健壮的代码。wiki中将设计模式分为四类,分别是:创建模式(creationalpatterns)结构模式(structuralpatterns)行为模式(behavioralpatterns)并发模式(concurrencypatt......
  • golang之设计模式
    [选项模式]packagemainimport"fmt"typeOptionFuncfunc(*DoSomethingOption)typeDoSomethingOptionstruct{aintbstringcbool}funcNewDoSomethingOption(cbool,opts...OptionFunc)*DoSomethingOption{s:=&DoSomethi......
  • 【设计模式】原型模式——其他框架源码中的原型模式
    原型模式在其他框架源码中也有广泛的应用。Retrofit众所周知Retrofit是OkHttp的扩展,因此Retrofit的Call接口也像OkHttp的Call类一样实现了原型模式。Call与原型模式有关的代码如下:publicinterfaceCall<T>extendsCloneable{//……代码省略……/***Createanew,i......