桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影响。
桥接模式的目的是将抽象与实现分离,使它们可以独立地变化,该模式通过将一个对象的抽象部分与它的实现部分分离,使它们可以独立地改变。它通过组合的方式,而不是继承的方式,将抽象和实现的部分连接起来。
桥接模式的几个关键角色:
在这个例子中,我们有两个维度:Shape
和 Color
。Shape
表示图形,Color
表示颜色。通过桥接模式,我们可以轻松地组合不同的形状和颜色。
#include <iostream>
// 实现接口
class Color
{
public:
virtual void applyColor() = 0;
};
// 具体实现类
class Red : public Color
{
public:
void applyColor() override
{
std::cout << "Applying red color" << std::endl;
}
};
class Green : public Color
{
public:
void applyColor() override
{
std::cout << "Applying green color" << std::endl;
}
};
// 抽象类
class Shape
{
protected:
Color *color;
public:
Shape(Color *color) : color(color) {}
virtual void draw() = 0;
};
// 扩展抽象类
class Circle : public Shape
{
public:
Circle(Color *color) : Shape(color) {}
void draw() override
{
std::cout << "Drawing circle ";
color->applyColor();
}
};
class Rectangle : public Shape
{
public:
Rectangle(Color *color) : Shape(color) {}
void draw() override
{
std::cout << "Drawing rectangle ";
color->applyColor();
}
};
int main()
{
// 创建具体的形状和颜色
Color *red = new Red();
Color *green = new Green();
Shape *redCircle = new Circle(red);
Shape *greenRectangle = new Rectangle(green);
// 绘制
redCircle->draw();
greenRectangle->draw();
// 释放资源
delete red;
delete green;
delete redCircle;
delete greenRectangle;
return 0;
}
.post-copyright { box-shadow: 2px 2px 5px; line-height: 2; position: relative; margin: 40px 0 10px; padding: 10px 16px; border: 1px solid var(--light-grey); transition: box-shadow .3s ease-in-out; overflow: hidden; border-radius: 12px!important; background-color: var(--main-bg-color); } .post-copyright:before { position: absolute; right: -26px; top: -120px; content: '\f25e'; font-size: 200px; font-family: 'FontAwesome'; opacity: .2; } .post-copyright__title { font-size: 22px; } .post-copyright_type { font-size: 18px; color:var(--theme-color) } .post-copyright .post-copyright-info { padding-left: 6px; font-size: 15px; } .post-copyright-m-info .post-copyright-a, .post-copyright-m-info .post-copyright-c, .post-copyright-m-info .post-copyright-u { display: inline-block; width: fit-content; padding: 2px 5px; font-size: 15px; } .muted-3-color { color: var(--main-color); } /*手机优化*/ @media screen and (max-width:800px){.post-copyright-m-info{display:none}} ------本页内容已结束,喜欢请分享------