PHP Factory, какие преимущества я могу иметь?

Я хочу улучшить свои знания о PHP Pattern и архитектуре.
Я создаю глупый пример использования Factory Pattern

Это мой код:

index.php

$shape = Shape::getShape('circle', 3);
echo $shape->getArea();

shapes.php

class Shape
{

public static function getShape($type, $num)
{
switch ($type) {
case 'circle':
return new Circle($num);
break;
case 'square':
return new Square($num);
break;
default:
throw new Exception("Unrecognized shape");
}
}
}abstract class Form{
abstract public function getArea();
}

class Circle extends Form{
protected $_type = "Circle";
private $area;
/**
* circle constructor.
* @param $area
*/
public function __construct($area)
{
$this->area = $area;
}
public function getArea(){
return $this->area*pi();
}
}

Где преимущества такого подхода?

Я мог бы сделать это, чтобы создать объект круга

$circle = new Circle(3);
echo $circle->getArea();

Единственное преимущество, которое я вижу при использовании Factory Pattern, заключается в том, что я не могу знать, какую Shape хочет пользователь.

0

Решение

С таким упрощенным примером, как ваш, нет никаких реальных преимуществ; но реальная фабрика обычно применяет бизнес-логику, чтобы определить, какой класс создавать, а не указывать, какой класс вы хотите вернуть.

В вашем примере вы конкретно говорите, какую фигуру вы хотите, и тогда она просто возвращает объект соответствующего типа; но предположим, что вы знали только, сколько у вас было углов, и передали это количество углов фабрике, тогда он мог бы определить, какой объект формы нужно вернуть … вы изменили логику, зная, что 3 угла означает треугольник, 4 углы означает квадрат и т. д. для фабрики.

Это все еще слишком упрощенный пример, но, возможно, демонстрирует хотя бы одно преимущество фабричной модели.

Фабрика может также обрабатывать внедрение зависимостей в ваши объекты: фабрика должна знать зависимости, в то время как вызывающий код не имеет доступа к зависимостям, или даже знать, какими они могут быть, и поэтому не сможет создать экземпляр требуемого класса в свой.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector