23种设计模式 - 桥接模式(Bridge)

桥接模式(Bridge)—— 外卖平台和支付方式,组合搭桥

大白话解释

你点外卖时,有两个东西可以自由选:

  1. 点餐平台(美团 / 饿了么)
  2. 支付方式(微信 / 支付宝 / 银行卡)

👉 注意:

  • 你可以 美团 + 微信
  • 也可以 美团 + 支付宝
  • 也可以 饿了么 + 微信
  • 也可以 饿了么 + 银行卡

❌ 如果用继承硬写,会变成:

  • 美团-微信支付类
  • 美团-支付宝类
  • 饿了么-微信支付类
  • 饿了么-银行卡类

👉 组合一多,直接爆炸 💥

✅ 桥接模式怎么解决?

👉 把两个维度拆开:

平台(抽象部分)

👉 只负责:下单流程

支付方式(实现部分)

👉 只负责:怎么付钱

👉 平台“拿着”支付方式,这就是桥

桥接模式:把抽象部分和实现部分分离,让它们可以独立地变化。避免因为"两个维度的变化"导致类数量爆炸。

常见场景:

  • UI 主题(深色/浅色)× 平台(Windows/Mac/Linux)
  • 消息(普通消息/加密消息)× 发送渠道(短信/邮件/推送)
  • 外卖平台(美团/饿了么) x 支付方式(微信/支付宝/银行卡)

C++ 代码示例

场景:外卖平台可以通过不同支付方式(微信/支付宝/银行卡)支付。

#include <iostream>
#include <memory>
#include <string>

// ==============================
// 支付方式(实现部分)
// ==============================
class Payment {
public:
    virtual void pay(int amount) = 0;
    virtual ~Payment() = default;
};

class WeChatPay : public Payment {
public:
    void pay(int amount) override {
        std::cout << "用微信支付 " << amount << " 元\n";
    }
};

class AliPay : public Payment {
public:
    void pay(int amount) override {
        std::cout << "用支付宝支付 " << amount << " 元\n";
    }
};

// ==============================
// 外卖平台(抽象部分)
// ==============================
class FoodPlatform {
protected:
    std::shared_ptr<Payment> payment; // 🌉 桥

public:
    FoodPlatform(std::shared_ptr<Payment> p) : payment(p) {}
    virtual void orderFood(int amount) = 0;
};

// ==============================
// 美团
// ==============================
class Meituan : public FoodPlatform {
public:
    using FoodPlatform::FoodPlatform;

    void orderFood(int amount) override {
        std::cout << "[美团] 下单成功\n";
        payment->pay(amount);
    }
};

// ==============================
// 饿了么
// ==============================
class Eleme : public FoodPlatform {
public:
    using FoodPlatform::FoodPlatform;

    void orderFood(int amount) override {
        std::cout << "[饿了么] 下单成功\n";
        payment->pay(amount);
    }
};

// ==============================
// 使用
// ==============================
int main() {
    auto wechat = std::make_shared<WeChatPay>();
    auto alipay = std::make_shared<AliPay>();

    // 美团 + 微信
    Meituan m1(wechat);
    m1.orderFood(30);

    // 饿了么 + 支付宝
    Eleme m2(alipay);
    m2.orderFood(50);

    return 0;
}

输出:

[美团] 下单成功
用微信支付 30 元
[饿了么] 下单成功
用支付宝支付 50 元

类数量对比

方式3个平台 × 3种支付方式
没有桥接(直接继承)9 个类
使用桥接模式3 + 3 = 6 个类
增加到 5个平台 × 5种支付方式继承需25个,桥接只需10个

优缺点

说明
✅ 优点避免类爆炸,扩展方便
✅ 优点可以运行时切换实现
✅ 优点抽象和实现解耦,独立演进
❌ 缺点增加了设计复杂度,适合变化点明确的场景

一句话记忆

桥接模式 = 两个都在变?拆开!别乘法爆炸,用组合搭桥。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值