提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.
应用场景:
一系列相互依赖的对象有不同的具体实现。提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合
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:与工厂方法相比,抽象工厂的接口中包含了所有产品的创建.