ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

桥接模式实现

2022-05-16 20:34:15  阅读:121  来源: 互联网

标签:virtual 桥接 void 模式 userColor 实现 Shape Color public


 

// 抽象部分, 外部接口,抽象化产品
// 当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。
// 当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。
// 当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。
// 例子1: 画图形 正方形, 圆形,长方形 颜色:红色,黑色, 白色

// 颜色
class Color {
public:
    virtual void FillColor(string produce) = 0;
    virtual ~Color() {};
};

// 形状
class Shape {
protected:
    Color* fillcolor;
public:
    Shape(Color* userColor): fillcolor(userColor){};
    virtual void DrawShape() = 0;
};

// 具体的形状类
class Rectangle : public Shape {
public:
    virtual void DrawShape() override
    {
        fillcolor->FillColor("长方形");
    }
    Rectangle(Color* userColor) : Shape(userColor) {}
};

class Square : public Shape {
public:
    virtual void DrawShape() override
    {
        fillcolor->FillColor("正方形");
    }
    Square(Color* userColor) : Shape(userColor) {}
};

class White : public Color {
public:
    virtual void FillColor(string produce) override
    {
        cout << "entry White " << __func__ << endl;
        cout << "白色的" + produce << endl;
    }
};

class Black : public Color {
public:
    virtual void FillColor(string produce) override
    {
        cout << "entry Black " << __func__ << endl;
        cout << "黑色的" + produce << endl;
    }
};

TEST(bridge_module, bridge1)
{
    Color* w = new White();
    Color* blk = new Black();
    Rectangle rg(w);
    Square sq(blk);
    sq.DrawShape();
    rg.DrawShape();
}

 桥接模式的优缺点:

优点:解耦,拓展方便

缺点:1. 需要抽象出好的层次 2. 加大系统理解难度。

标签:virtual,桥接,void,模式,userColor,实现,Shape,Color,public
来源: https://www.cnblogs.com/hicpp/p/16278375.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有