C2:抽象工厂 Abstract Factory

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.

应用场景:

一系列相互依赖的对象有不同的具体实现。提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合

UML:

代码示例:

abstract class AbstractProductA
{
}

abstract class AbstractProductB
{
}

class ProductA1 extends AbstractProductA
{

}

class ProductA2 extends AbstractProductA
{

}

class ProductB1 extends AbstractProductB
{

}

class ProductB2 extends AbstractProductB
{

}

abstract class AbstractFactory
{
    abstract public function createProductA();
    abstract public function createProductB();
}

class ConcreateFactory1 extends AbstractFactory
{
    public function createProductA()
    {
        return new ProductA1();
    }

    public function createProductB()
    {
        return new ProductB1();
    }

}

class ConcreateFactory2 extends AbstractFactory
{
    public function createProductA()
    {
        return new ProductA2();
    }

    public function createProductB()
    {
        return new ProductB2();
    }
}

// 调用
$factory1 = new ConcreateFactory1();
$factory1->createProductA();

  

ps:与工厂方法相比,抽象工厂的接口中包含了所有产品的创建.

原文地址:https://www.cnblogs.com/itfenqing/p/7782673.html