图案工厂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。