我有一个带有子类的Shape类,例如Rectangle和Triangle。我提供的代码尝试创建一个只有3个方面的Rectangle类'在传入的数组中。现在,抛出一个异常,对于这种情况似乎是正确的。唯一的问题是,这可以防止其余的代码被执行。解决这个问题的明显方法是删除不正确的创建调用,但我想知道是否有更复杂的方法来处理它?当只提供3个边时,有什么东西可以自动创建为三角形而不是矩形?感谢。
答案 0 :(得分:4)
您可以使用工厂方法执行此操作,例如:
class ShapeFactory {
public function shapeFromSides($sides) {
if (count($sides) == 4) {
return $this->createRectangle($sides);
}
if (count($sides) == 3) {
return $this->createTriangle($sides);
}
throw new \Exception('Unable to create shape from sides provided');
}
public function createRectangle($sides) {
return new Rectangle($sides);
}
public function createTriange($sides) {
return new Triangle($sides);
}
}
显然,这不会创建您的对象,并且参数可能有误,但它应该让您了解此方法的工作原理。
但是,我同意@ deceze的评论。我并不认为创建一个具有无效边数的形状是你应该遇到的逻辑,因为它很可能是程序员错误。