设计模式-结构型02-桥接模式

本文通过一个具体的服装颜色与类型的例子,介绍了桥接模式的概念、结构及其应用方式。桥接模式可以有效解决当一个系统需要应对多种变化组合时,避免产生大量的子类的问题。

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

一,动机

设想一下,如果要绘制一些图形,例如,正方形,矩形,三角形,这只需要三个类才能表示。但是,如果加上颜色呢?白色,红色,黑色。这样算下来,我们有3*3种图形,如果使用工厂模式,我们必要定义9个工厂。而假如有m个图形,n种颜色,难道去定义m*n个工厂类?

桥接模式就是针对这个问题而诞生的


二,定义

桥接模式:将抽象部分与它的实现部分 分离,使他们都可以独立的变化。


三,模式结构

1,Abstraction(抽象类)

定义了子类的接口

2,RefinedAbstraction(扩充抽象类)

实现了继承到的接口

3,Implementor(实现类接口)

定义了子类的接口

4,ConcreteImplementorA(实现A)

实现了继承到的接口,方案A

5,ConcreteImplementorB(实现B)

实现了继承到的接口,方案B


四,代码实例

下面有一个关于服装的例子详细说明。

包含有红黄黑三种颜色,有裤子和夹克两种类型。

#include <iostream>

using namespace std;

class Color
{
public:
    virtual void PaintColor() = 0;
};
class Red : public Color
{
public:
    void PaintColor()
    {
        cout<<"红色";
    }
};
class Black : public Color
{
public:
    void PaintColor()
    {
        cout<<"黑色";
    }
};
class Yellow : public Color
{
public:
    void PaintColor()
    {
        cout<<"黄色";
    }
};

class Cloth
{
protected:
    Color* color;
public:
    void SetColor(Color* tmp)
    {
        color = tmp ;
    }
    virtual void PrintInfomation() = 0;
};

class pants : public Cloth //裤子
{
    void PrintInfomation()
    {
        color->PaintColor();
        cout<<"裤子"<<endl;
    }
};
class jacket : public Cloth //裤子
{
    void PrintInfomation()
    {
        color->PaintColor();
        cout<<"夹克衫"<<endl;
    }
};

int main()
{
    Cloth* test = new pants();
    test->SetColor(new Black());
    test->PrintInfomation();
    return 0;
}

输出结果为

黑色裤子


可以看出,我使用了3+2个子类 实现了3*2个不同的产品。这就是桥接模式的优点所在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值