当前位置:   article > 正文

《桥接模式(极简c++)》

《桥接模式(极简c++)》

        本文章属于专栏《设计模式(极简c++版)》


         继续上一篇《原型模式(极简c++)》。本章简要说明桥接模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。

  • 模式说明
    • 方案: 将抽象部分与它的实现部分分离,使多个组合在一起的品类可以独立变化。
    • 优点:
      • 分离抽象和实现部分,使得它们可以独立地变化,易于扩展。
      • 通过对象组合而不是继承的方式实现解耦,提高了代码的灵活性。
    • 缺点:
      • 增加了系统的复杂度,因为需要多个抽象类和实现类。
  • 本质思想:用一个抽象类组合另外一个抽象类,如形状和颜色,在构建时,使用具体的类完成组合,如红色的正方形。
  • 实践建议:一个基础主体包含多个属性时,都可以使用。该模式能很好地保留设计时的模块语义,方便未来维护
  1. #include <iostream>
  2. // 实现部分接口:颜色
  3. class Color {
  4. public:
  5. virtual void applyColor() const = 0;
  6. };
  7. // 具体实现类:红色
  8. class RedColor : public Color {
  9. public:
  10. void applyColor() const override {
  11. std::cout << "Red" << std::endl;
  12. }
  13. };
  14. // 具体实现类:绿色
  15. class GreenColor : public Color {
  16. public:
  17. void applyColor() const override {
  18. std::cout << "Green" << std::endl;
  19. }
  20. };
  21. // 抽象部分类:形状
  22. class Shape {
  23. protected:
  24. Color* color;
  25. public:
  26. Shape(Color* c) : color(c) {}
  27. virtual void draw() const = 0;
  28. };
  29. // 扩展的抽象部分类:圆形
  30. class Circle : public Shape {
  31. public:
  32. Circle(Color* c) : Shape(c) {}
  33. void draw() const override {
  34. std::cout << "Drawing Circle with color ";
  35. color->applyColor();
  36. }
  37. };
  38. // 扩展的抽象部分类:矩形
  39. class Rectangle : public Shape {
  40. public:
  41. Rectangle(Color* c) : Shape(c) {}
  42. void draw() const override {
  43. std::cout << "Drawing Rectangle with color ";
  44. color->applyColor();
  45. }
  46. };
  47. int main() {
  48. Color* red = new RedColor();
  49. Color* green = new GreenColor();
  50. Shape* redCircle = new Circle(red);
  51. Shape* greenRectangle = new Rectangle(green);
  52. redCircle->draw(); // 输出: Drawing Circle with color Red
  53. greenRectangle->draw(); // 输出: Drawing Rectangle with color Green
  54. delete red;
  55. delete green;
  56. delete redCircle;
  57. delete greenRectangle;
  58. return 0;
  59. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/294163
推荐阅读
相关标签
  

闽ICP备14008679号