抽象工厂模式:为什么我们需要抽象产品接口
Abstract factory pattern: why we need Abstract Product Interface
我们知道,设计抽象工厂模式需要以下类:
抽象工厂
混凝土工厂
抽象产品
产品
我的问题是为什么我们需要 AbstractProduct?查看以下代码,我在其中创建了没有任何 AbstractProduct 的抽象工厂模式:
<?php
abstract class AbstractFactory
{
abstract public function createProduct(string $content);
}
class Factory extends AbstractFactory
{
public function createProduct(string $content)
{
return new Product($content);
}
}
class Product
{
private $text;
public function __construct(string $text)
{
$this->text = $text;
}
public function getText(){
return $this->text;
}
}
$factory = new Factory();
$product = $factory->createProduct('foobar');
echo $product ->getText();
?>
工厂生产一些产品。
你可以看到很多类似的东西:
- 汽车厂生产汽车。
- 一家牛奶厂生产一些牛奶。
- 等等。
就是这样。当您有多种类型的产品时,AbstractProduct 适用。在上面的示例中,Product 可以是 Car 或 Milk。如果您只有一种产品,则不需要定义 AbstractProduct,因为该模式不鼓励您将 Product 抽象化。只需要 AbstractFactory 即可。
我们知道,设计抽象工厂模式需要以下类:
抽象工厂
混凝土工厂
抽象产品
产品
我的问题是为什么我们需要 AbstractProduct?查看以下代码,我在其中创建了没有任何 AbstractProduct 的抽象工厂模式:
<?php
abstract class AbstractFactory
{
abstract public function createProduct(string $content);
}
class Factory extends AbstractFactory
{
public function createProduct(string $content)
{
return new Product($content);
}
}
class Product
{
private $text;
public function __construct(string $text)
{
$this->text = $text;
}
public function getText(){
return $this->text;
}
}
$factory = new Factory();
$product = $factory->createProduct('foobar');
echo $product ->getText();
?>
工厂生产一些产品。
你可以看到很多类似的东西:
- 汽车厂生产汽车。
- 一家牛奶厂生产一些牛奶。
- 等等。
就是这样。当您有多种类型的产品时,AbstractProduct 适用。在上面的示例中,Product 可以是 Car 或 Milk。如果您只有一种产品,则不需要定义 AbstractProduct,因为该模式不鼓励您将 Product 抽象化。只需要 AbstractFactory 即可。