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