桥接模式实现
// 抽象部分, 外部接口,抽象化产品 // 当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。 // 当一个系统不希望使用继承或因为多层次继承导致系统类的个数急剧增加时。 // 当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时。 // 例子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. 加大系统理解难度。