Lighten a specific aspect of:
Factory Pattern. When to use factory methods?
我的团队对工厂设计模式进行了讨论。
在我们的项目中,我们有一些像这样构建的工厂:
class ProductFactory {
const PRODUCT_A = 'product_a';
const PRODUCT_B = 'product_b';
const PRODUCT_C = 'product_c';
private static $classMapping = array(self::PRODUCT_A => 'A',
self::PRODUCT_B => 'B',
self::PRODUCT_C => 'C');
public function create($productConstant) {
$className = self::$classMapping[$productConstant];
return new $className();
}
}
讨论的是关于这个工厂的使用。 如果我从不动态定义产品并且总是定义我喜欢从中接收的产品,是否需要使用此模式?
最佳答案
工厂的优点是它们可以解耦代码。以您的类 Foo
为例,它需要一个 A
实例:
class Foo {
public function __construct() {
$a = new A;
}
}
类 Foo
现在与类 A
耦合,因为它在其源代码中硬编码了类名。如果您愿意,您无法提供 A
到 Foo
的替代实现,例如在测试中模拟 A
。这就是工厂发挥作用的地方:
class Foo {
public function __construct(ProductFactory $factory) {
$a = $factory->create($factory::PRODUCT_A);
}
}
您现在可以在需要时将任何类型的 A
注入(inject)到 Foo
中,您已经解耦了这两个类。
这就是工厂的用途。在适当的时候使用它们。如果将 Foo
与 A
耦合没有问题,那么您将拥有更多能力。
关于php - 使用工厂获取特定对象有什么优点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13087432/