手动设置对象的位置或让对象完成所有操作?

时间:2010-06-11 07:39:43

标签: actionscript-3 oop

我一直在思考设置线段位置的最佳方法,我从类Polygon中调用了一个类Line(长度,角度,前一个)。现在我有:

public class Line extends Sprite {
    public function Line(length:Number, angle:Number, previous:Line = null) {
        if (previous != null) {
            this.x = previous.end.x;
            this.y = previous.end.y;
        } else {
            this.x = 0;
            this.y = 0;
        }
        /**/
    }
}

现在,这是最佳做法还是我应该做的事情:

Polygon.addLine(length:Number, angle:Number):void {
    var previous = (_line.length == 0) ? null : _line[_line.length - 1]; // Array containing all Lines
    var line:Line = new Line(length, angle, previous);
    line.x = (_line.length == 0) ? 0 : previous.end.x;
    line.y = (_line.length == 0) ? 0 : previous.end.y;
    /**/
}

要添加的一件事,Line仅在此应用程序中由Polygon使用。

1 个答案:

答案 0 :(得分:2)

编辑:根据您的评论完全重写我的答案......

好的,所以你总是有一个Line类,问题是把逻辑添加到多边形的位置。

您的Line CTor假定有一个可选的前任Line对象。如果你改变它,那么CTor采用一个可选的Point,那么耦合就会减少。未来可能出现的其他类也可以使用起点,长度和角度构造线。因此,从这个角度来看,CTor方法看起来很好。

此外,多边形基本上是一堆连接线(和评论建议的弧线),因此计算线的终点的逻辑似乎真正属于Line类。同样,Line的其他用户也可能不必复制Polygon的代码。

如前所述,还有第三种方式:
例如,您可以创建一个LineFactory类,该类根据起点,长度和角度创建Line对象。然后,该工厂函数将进行计算并设置该行的起点和终点设置终点。