图案工厂PHP,我能有什么优势?
Pattern Factory PHP, what advantages Can I have?
我想提高我对 PHP 模式和架构的了解。
我创建了一个愚蠢的例子来使用工厂模式
这是我的代码:
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();
我可以看到使用工厂模式的唯一优势是,我不知道用户想要哪种形状。
像你这样简单的例子,没有任何实际好处;但是一个真正的工厂通常会应用业务逻辑来确定 class 要实例化的内容,而不是你告诉它你想要它 return.
的内容 class
在你的例子中,你具体说了你想要什么形状,然后它只是 return 一个适当类型的对象;但是假设你只知道你有多少个角,并将那个数量的角传递给工厂,那么它可以确定要 return 的形状对象......你已经移动了知道 3 个角意味着什么的逻辑一个三角形,四个角代表一个正方形,等等。
这仍然是一个过于简单的示例,但或许至少展示了工厂模式的一个好处。
工厂还可以处理对对象的依赖注入:工厂应该知道依赖关系,而调用代码无法访问依赖关系,甚至不知道它们可能是什么,因此无法自行实例化所需的 class。
我想提高我对 PHP 模式和架构的了解。 我创建了一个愚蠢的例子来使用工厂模式
这是我的代码:
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();
我可以看到使用工厂模式的唯一优势是,我不知道用户想要哪种形状。
像你这样简单的例子,没有任何实际好处;但是一个真正的工厂通常会应用业务逻辑来确定 class 要实例化的内容,而不是你告诉它你想要它 return.
的内容 class在你的例子中,你具体说了你想要什么形状,然后它只是 return 一个适当类型的对象;但是假设你只知道你有多少个角,并将那个数量的角传递给工厂,那么它可以确定要 return 的形状对象......你已经移动了知道 3 个角意味着什么的逻辑一个三角形,四个角代表一个正方形,等等。
这仍然是一个过于简单的示例,但或许至少展示了工厂模式的一个好处。
工厂还可以处理对对象的依赖注入:工厂应该知道依赖关系,而调用代码无法访问依赖关系,甚至不知道它们可能是什么,因此无法自行实例化所需的 class。