设计模式-桥接模式(C++)

本文介绍桥接模式的应用场景及其实现方式,通过实例说明如何利用该模式降低对象间的耦合度,实现对象的灵活组合与扩展。以安装操作系统为例,展示了不同品牌的计算机与多种操作系统之间的桥接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

常用的场景

1.当一个对象有多个变化因素的时候,考虑依赖于抽象的实现,而不是具体的实现。如上面例子中手机品牌有2种变化因素,一个是品牌,一个是功能。

2.当多个变化因素在多个对象间共享时,考虑将这部分变化的部分抽象出来再聚合/合成进来,如上面例子中的通讯录和游戏,其实是可以共享的。

3.当我们考虑一个对象的多个变化因素可以动态变化的时候,考虑使用桥接模式,如上面例子中的手机品牌是变化的,手机的功能也是变化的,所以将他们分离出来,独立的变化。

优点

1.将实现抽离出来,再实现抽象,使得对象的具体实现依赖于抽象,满足了依赖倒转原则。

2.将可以共享的变化部分,抽离出来,减少了代码的重复信息。

3.对象的具体实现可以更加灵活,可以满足多个因素变化的要求。

缺点

客户必须知道选择哪一种类型的实现。

考虑装操作系统,有多种配置的计算机,同样也有多款操作系统。如何运用桥接模式呢?可以将操作系统和计算机分别抽象出来,让它们各自发展,减少它们的耦合度。当然了,两者之间有标准的接口。这样设计,不论是对于计算机,还是操作系统都是非常有利的。

#include<iostream>

using namespace std;

class OS
{
public:
    virtual void InstallOS_Imp() = 0;
};

class WindowsOS : public OS
{
public:
    void InstallOS_Imp() { cout << "Install windows os" << endl; }
};

class LinuxOS : public OS
{
public:
    void InstallOS_Imp() { cout << "Install Linux os" << endl; }    
};

class UnixOS : public OS
{
public:
    void InstallOS_Imp() { cout << "Install Unix os" << endl; }
};

class Computer
{
public:
    virtual void InstallOS(OS * os) = 0;
};

class DellComputer : public Computer
{
public:
    void InstallOS(OS * os) { os->InstallOS_Imp(); }
};

class AppleComputer : public Computer
{
public:
    void InstallOS(OS * os) { os->InstallOS_Imp(); }
};

class HPComputer : public Computer
{
public:
    void InstallOS(OS * os) { os->InstallOS_Imp(); }
};

int main()
{
    OS * os1 = new WindowsOS();
    OS * os2 = new LinuxOS();

    Computer * computer1 = new AppleComputer();

    computer1->InstallOS(os1);
    computer1->InstallOS(os2);

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值