我想提高我对PHP模式和架构的了解。 我创建了一个使用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可以看到的唯一优势是,我无法知道用户想要的形状。
答案 0 :(得分:0)
像你这样简单的例子,没有任何实际的好处;但是真正的工厂通常会应用业务逻辑来确定要实例化的类,而不是告诉它要返回哪个类。
在你的例子中,你专门说出你想要的形状,然后它只返回一个合适类型的对象;但是假设你只知道你有多少角落,并将那些角落传递给工厂,那么就可以确定返回什么形状的物体....你已经改变了知道3个角意味着三角形的逻辑,4角落意味着工厂的广场等。
这仍然是一个过于简单化的例子,但也许可以证明工厂模式的一个好处。
工厂还可以处理对象的依赖注入:工厂应该知道依赖项,而调用代码不能访问依赖项,甚至不知道它们可能是什么,因此无法实例化自己需要上课。