Pattern Factory PHP,我可以拥有哪些优势?

时间:2016-05-13 21:37:21

标签: php design-patterns factory-pattern

我想提高我对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可以看到的唯一优势是,我无法知道用户想要的形状。

1 个答案:

答案 0 :(得分:0)

像你这样简单的例子,没有任何实际的好处;但是真正的工厂通常会应用业务逻辑来确定要实例化的类,而不是告诉它要返回哪个类。

在你的例子中,你专门说出你想要的形状,然后它只返回一个合适类型的对象;但是假设你只知道你有多少角落,并将那些角落传递给工厂,那么就可以确定返回什么形状的物体....你已经改变了知道3个角意味着三角形的逻辑,4角落意味着工厂的广场等。

这仍然是一个过于简单化的例子,但也许可以证明工厂模式的一个好处。

工厂还可以处理对象的依赖注入:工厂应该知道依赖项,而调用代码不能访问依赖项,甚至不知道它们可能是什么,因此无法实例化自己需要上课。