我有一个绘图程序,用户可以绘制一个椭圆或一条线,它们都来自形状。我正在创建一个橡皮筋,并根据用户正在绘制的内容我说
rubberBand = new Ellipse();
//or
rubberBand = new Line();
但如果我将橡皮筋设置为线,我无法访问 x1 x2 等,它表示形状不包含 X1 的定义。我尝试创建一个椭圆并将其投射到一条线上,但仍然是同样的问题。我该如何解决这个问题?
我有一个绘图程序,用户可以绘制一个椭圆或一条线,它们都来自形状。我正在创建一个橡皮筋,并根据用户正在绘制的内容我说
rubberBand = new Ellipse();
//or
rubberBand = new Line();
但如果我将橡皮筋设置为线,我无法访问 x1 x2 等,它表示形状不包含 X1 的定义。我尝试创建一个椭圆并将其投射到一条线上,但仍然是同样的问题。我该如何解决这个问题?
对我来说,这听起来像是一个基本的多态性问题。想想你实际上想要做什么——例如,一条线有 2 个点(X1/Y1 和 X2/Y2)。一个椭圆(一个长圆形)没有这样的属性——它可能有一个宽度,可能还有一个高度,可能还有一个 X 和 Y 坐标(或一个位置属性)。
我猜您正在尝试在用户用鼠标拖动形状时调整形状的边界和/或位置。在这种情况下,您需要为形状定义的操作取决于它是哪种形状。对于一行,您需要编写一个调整 X2 和 Y2(或其他)的方法。对于椭圆,您可能需要另一种方法来调整具有宽度、高度、左侧和顶部属性的形状。然后你只需要根据你正在处理的形状来确定调用哪一个。
您需要考虑 Liskov 替换原则:
http://www.objectmentor.com/resources/articles/lsp.pdf http://www.oodesign.com/liskov-s-substitution-principle.html