应该如何为两个以上的层次结构实现“桥接”设计模式?

问题描述

这解释了我所指的“桥接”模式:https://refactoring.guru/design-patterns/bridge

这是上面帖子中的一个场景:

假设您有一个带有一对子类的几何 Shape 类:Circle 和 Square。您希望扩展此类层次结构以合并颜色,因此您计划创建红色和蓝色形状子类。但是,由于您已经有两个子类,因此您需要创建四个类组合,例如 BlueCircle 和 RedSquare。

这个场景存在的问题:

向层次结构添加新的形状类型和颜色将使层次结构呈指数级增长。例如,要添加一个三角形,您需要引入两个子类,每种颜色一个。之后,添加新颜色需要创建三个子类,每个形状类型一个。我们走得越远,情况就变得越糟。

为了避免这个问题,我们像这样实现桥接模式:

将与颜色相关的代码提取到它自己的具有两个子类的类中:红色和蓝色。然后,Shape 类获取一个指向颜色对象之一的引用字段。现在形状可以将任何与颜色相关的工作委托给链接的颜色对象。该引用将充当 Shape 和 Color 类之间的桥梁。从现在开始,添加新颜色不需要更改形状层次结构,反之亦然。

我了解此实施的方式和原因。

但是如果我们需要第三层级呢,例如BorderStyle(其中边框样式可以是 StraightWavyZigZag?)

我想我们可以为 BorderStyle 实现第二个实现器类,并将它传递给 Shape 构造函数,如下所示:

# Blue inherits from the Color class (Implementation)
color_implementation = Blue.new()

# Wavy inherits from the BorderStyle class (Implementation)
border_style_implementation = Wavy.new()

# Triangle inherits from the Shape class,which we consider our Abstraction
shape = Triangle.new(color_implementation,border_style_implementation)

shape.draw() # prints "I'm a Blue Triangle with Wavy borders!"

所以我的问题是:

1.) 上面的例子“有效吗?” (也许它是工作代码,但它是否以某种方式引入了技术债务?)

1a.) 如果这不起作用,为什么不呢?

1b.) 如果这确实“有效”,它是否是桥接模式的正确应用?是否有更好的设计模式可用于管理 2 个以上的层次结构/属性(在想也许是装饰器模式?)

如果我遗漏了任何相关信息,我深表歉意——这种设计模式对我来说是全新的。感谢您的帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)