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

应用场景:

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

 

UML:

C2:抽象工厂 Abstract Factory

代码示例:

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:与工厂方法相比,抽象工厂的接口中包含了所有产品的创建.

相关文章:

  • 2022-03-04
  • 2021-10-02
  • 2022-02-18
  • 2021-06-29
  • 2021-05-13
  • 2021-08-08
  • 2021-06-02
  • 2021-09-26
猜你喜欢
  • 2021-04-27
  • 2022-01-23
  • 2021-11-29
  • 2021-07-15
  • 2021-08-17
  • 2021-10-20
  • 2021-07-28
相关资源
相似解决方案