这不是我第一次在工作中遇到任务,就像我将在下面描述的那样,我不知道哪种模式可以正确应用。也许是提示。
有条件的像这样:在GET参数中,需要绘制的图形的类型(type)到达。长度,宽度,直径等都没有关系。任何。您只需要按类型绘制形状。他们的人数是有限的。我喜欢这样:
我做了一个抽象类
Figure
,其中还有protected static $type = ''
一个抽象方法render
我制作了几个数字,继承自
Figure
,其中我覆盖了属性和方法。结果是SquareFigure extends Figure
,CircleFigure extends Figure
等TriangleFigure extends Figure
。然后,因为 类型是预先不可变的,我
FigureManager
在其中有一个映射,您可以从中通过类型获取类的名称:class FigureManager { public static function getFiguresMap() { return [ SquareFigure::getType() => SquareFigure::class, CircleFigure::getType() => CircleFigure::class, TriangleFigure::getType() => TriangleFigure::class ]; } }
现在在正确的地方我写了这样的东西:
$figureType = $_GET['type']; $figureClassName = FigureManager::getFiguresMap()[$figureType]; $figure = new $figureClassName(); $figure->render();
一切都很好,但问题是有一些类知道所有类型的形状。保留地图。添加新的时,您需要在那里添加另一个。如果有4-5个数字,那并不可怕,但如果有40-50个呢?一般来说,按照我的方式做可以吗?那么在这种情况下没有选择吗?或者有更实用的风水方法吗?正确应用任何设计模式。请告诉我。