C++ 我应该用许多派生类创建一个抽象类还是只创建一个通用类?
经典示例是抽象的 Shape 对象,其派生类 Square 和 Triangle 包含特定的几何图形和函数。
为什么我不只创建一个名为 Shape 的通用类,它包含一个更通用的几何数据成员来保存动态数量的点,这些点可以是正方形或三角形?函数可以采用一些参数来指示它是什么类型的形状,例如 Shape.process("square"); 而不是 Square.process();
我的问题清楚吗?这纯粹是一种风格选择吗?
你应该避免创建做一堆东西的“神”类。如果你必须实现很多形状怎么办?一个类应该只有一个职责,应该对扩展开放,对修改关闭。检查类设计原则或 SOLID 设计原则。您应该避免复杂的设计和具有多种职责的大类,因为在某一时刻维护它们或添加额外的功能会变得很痛苦。良好的设计也将更容易进行单元测试。
一般来说,您无法得到此类问题的答案。这将取决于您尝试解决的任何问题的情况和要求。在某些情况下,具有派生类的接口是有意义的。在其他情况下,拥有一个通用类是有意义的。不知道问题的要求,你将得不到真正的答案。
这真的取决于你需要什么Shape
。例如,如果您只是在绘制它,那么一个Shape
只从点到点绘制线的通用类将是完美的(无论如何对于多边形)。但是如果你想计算面积怎么办。在函数使用适当的面积公式的地方拥有一个Square
和Triangle
类可能会更容易。getArea()
没有硬性规定,它只取决于你需要它们做什么