【问题标题】:Why use "getObject" method when writing a Factory class?为什么在编写工厂类时使用“getObject”方法?
【发布时间】:2015-04-28 22:02:31
【问题描述】:

通常Factory 类包含类似getObject 的方法。

因此

class Factory
{
    private $type;

    function __construct($type)
    {
        $this->type = $type;
    }

    function getObject()
    {
        //example for brevity only to show use of $type variable
        if ($this->type) $object = new $type();
        return $object;
    }
}

问题:为什么不直接通过构造函数返回对象?

class Factory
{
    function __construct($type)
    {
        if ($type) $object = new $type();
        return $object;
    }

}

【问题讨论】:

标签: php oop design-patterns factory factory-pattern


【解决方案1】:

因为除了你自己的实例之外,你不能从构造函数返回任何东西。构造函数的全部意义在于设置一个实例。工厂的全部意义在于从用户那里抽象出一些复杂的构造/设置逻辑。

工厂类通常有一个静态方法,例如:

class Foo {
    public function __construct($x, $y) {
        // do something
    }

    // this is a factory method
    public static function createFromPoint(Point $point) {
        return new self($point->x, $point->y);
    }
}

$foo = Foo::createFromPoint(new Point(1, 1)); // makes no sense but shows the concept

【讨论】:

  • 好点!谢谢。而这个例子...... ..确实没有意义!您几乎可以使用$x$y 来调用该类,但在这里您可以使用“工厂方式”来实现
  • 这只是为了展示工厂的用途。想象一个复杂的构造函数,它具有许多依赖项和额外的配置例程(例如调用方法,并且可能在垃圾收集器中注册创建的实例或其他)。它使您能够重用很多这种逻辑。
  • 请注意,有两种工厂模式,factory design patternfactory-method pattern(略有不同)(参考设计模式:可重用面向对象软件的元素,又名 GoF 书)
  • @NikosM。当然,你是对的,但我认为他正在寻找第一个。
猜你喜欢
  • 2023-04-09
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多