减轻以下方面的具体方面:
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();
}
}
讨论是关于这家工厂的使用。 如果我从未动态定义产品并始终定义我想从中回收的产品,是否需要使用此模式?
答案 0 :(得分:2)
工厂的优势在于它们可以解耦代码。上课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
注入Foo
,您已将这两个类分开。
这就是工厂的用途。适当时使用它们。如果将Foo
与A
联系起来没有问题,那么对您有更多的权力。
答案 1 :(得分:1)
这取决于。
设计模式可以解决问题,而不是产生问题。