抽象工厂模式:为什么我们需要抽象产品接口

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 即可。