Dan*_*año 0 c++ qt design-patterns
假设我有一个大接口 IShape,它继承自 Circle、Square、Triangle...。
IShape已经变得非常大,并且具有处理不相关主题的功能:例如,许多用于尺寸计算,其他用于移动和动画,其他用于着色等。
这违反了接口隔离和单一职责原则,因此我试图找到更适合我的情况的设计模式,但我不确定什么是最好的方法。
我正在考虑将 IShape 分解为更小的接口:IDimensions、IMovement、IColour...,然后让 Circle、Square 和 Triangle 继承它们。这将解决胖接口的问题(尽管实现仍然很大)。
我应该遵循什么方法?
一种方法是使对象(IShape)保持相当“哑”(仅跟踪其内部状态,加上样板访问函数),然后添加以更复杂的方式作用于它的独立函数。在某些情况下,将这些函数集成到它们自己的类接口中可能很有用(特别是如果功能可以很好地分组并且需要一些内部状态),但根据我的观点和经验,独立的库没有任何问题。作用于物体的函数。例如,请注意,STL 的大部分是由非类函数组成的。
编辑:请注意,独立函数基本上是自动重入的(线程安全)。对于成员函数,您必须更加注意对象状态不会改变,您可能必须锁定某些部分等等。
edit2:我通常尝试支持对象的组合(对象A“有一个”对象B)而不是继承(对象A“是”对象B的一种类型)。当你想一想时,一个正方形(“是”一种形状)可能“有”一种颜色,但它“不是”一种颜色。另外,请认真考虑在哪个级别上组合对象:每个 Shape 是否都有颜色和/或尺寸(在这种情况下,Shape 基类应该具有 Color 和 Size/Polygon/Geometry/BoundingBox/... 成员),或者您希望在代码生态系统中保持 Shape 接口更加抽象(在这种情况下,具体的几何形状继承自(抽象)Shape,并且还具有进一步的具体属性,例如大小和颜色)?这(以及例如大小/几何的具体实现)主要取决于您想要对形状类似的对象做什么。
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |