Oop 此用例的设计模式

Oop 此用例的设计模式,oop,design-patterns,software-design,object-oriented-analysis,Oop,Design Patterns,Software Design,Object Oriented Analysis,我有多种形状要画,如矩形、正方形、圆形等,这些形状的数量可以增加到20个或更多。 我是否必须为所有这些形状创建不同的类并实现形状。这个方法会给我很多我不喜欢的类 是否有任何设计模式可以更好地处理这种情况 我们有这样的形状,每个形状里面有不同的物体。 子类化和参数的混合似乎适合这个问题 指导原则是:什么有助于开发人员使用形状集合,什么有助于形状实现者高效地提供操作(针对各种形状) 最好的答案可能只有在实验之后才能得到。从一小部分不同类型的形状开始,使用一个对形状执行预期操作的测试应用程序,找出哪些

我有多种形状要画,如矩形、正方形、圆形等,这些形状的数量可以增加到20个或更多。 我是否必须为所有这些形状创建不同的类并实现形状。这个方法会给我很多我不喜欢的类

是否有任何设计模式可以更好地处理这种情况

我们有这样的形状,每个形状里面有不同的物体。
子类化和参数的混合似乎适合这个问题

指导原则是:什么有助于开发人员使用形状集合,什么有助于形状实现者高效地提供操作(针对各种形状)

最好的答案可能只有在实验之后才能得到。从一小部分不同类型的形状开始,使用一个对形状执行预期操作的测试应用程序,找出哪些形状类工作得最好

有许多方法可以参数化形状,例如,圆、椭圆、抛物线和双曲线都是圆锥曲线的例子。正方形是边长相等的矩形,但也是正多边形,而正多边形又是闭合多边形。您可能会发现,仔细选择参数和形状类型可以提供许多常见的形状。

您不必制作一个
正方形
和一个
矩形
类,这些通常只是示例。有无数种方法可以实现绘制任何形状-为每个单独的形状创建一个类只是其中之一

拥有
形状
接口的主要好处是,它允许客户端代码不与当前实现形状的方式耦合,而只与形状的概念耦合

然而,
形状
不一定是实现一个特定形状(如正方形或三角形)的对象。您的
Shape
可能有一个
render()
方法,由各个实现决定如何进行渲染

例如,您可以使用
位图实现形状
,该位图保留
文件
属性,并通过显示图像来实现
渲染()
,同时还可以使用
多边形实现形状
,该多边形实现形状保留
对象的列表并实现
渲染()
在这些点之间画线


不过,只要这是最简单的解决方案,从一个矩形和一个圆形开始(或者你刚开始使用的任何形状)可能还是有意义的。试想一下:如果你只需要一个圆和一个矩形,而不需要更多的形状,那该怎么办?如果是这样的话,你花了五个月的时间在一个可以完美呈现最巧妙形状的解决方案上,那你就浪费了五个月的时间。如果事实证明,随着时间的推移,形状的多样性急剧增加,你会很高兴看到所有的客户端代码只取决于
形状的概念:你只需传递一个
多边形
位图
,而不是一个
矩形
正方形
,客户端代码就会继续工作。

你为什么不想拥有与形状一样多(或更多)的类呢?假设我有1000个形状,那么有这么多的类是明智的吗?这是一个很好的软件编码实践吗?对于三角形、矩形和椭圆族等形状,可以使用一个接口多边形。这样可以减少类的数量。设计大量类是OOP的基本实践。如果您不喜欢创建大量的类,那很好:OOP并不是解决所有问题的方法。但是,如果您正在寻找避免类的技术,那么您应该看看不同的范例。不愿意创建新类会导致OO应用程序的设计不完善。我已经编辑了这个问题,并附上了图表,请您检查一下,这非常有用。这看起来更像是一组图表。这些通常被称为字形,而不是形状。然后,您需要一个非常通用的
类,每个特定的图都有一个图实例。有两种基本方法可以对图表进行编码。例如,作为直线和圆弧的集合。或者,作为位图。在这两种情况下,实例都可以保存/持久化,然后根据需要读取,例如显示。