创建型模式
Factory (对象创建型)
目的
定义一个用于创建对象的接口,让子类决定实例哪个类,类的实例延迟到其子类。
额外效果
1.为子类提够挂钩
2.连接平行类的层次
实现
方式
- 基类实现具体的创建函数,子类继承扩展
- 基类抽象创建函数,子类去实现
-
利用参数,创建对象 (简单工厂模式)
abstract class Product { abstract function getName(); } abstract class Factory { abstract function create(); } /**产品A**/ class ProductA extends Product{ function getName(){ echo "ProductA"; } } /**产品B**/ class ProductB extends Product{ function getName(){ echo "ProductB"; } } /**工厂A**/ class FactoryA extends Factory{ function create(){ return new ProductA(); } } /**工厂B**/ class FactoryB extends Factory{ function create(){ return new ProductB(); } } /**client**/ $fA = new FactoryA(); $fB = new FactoryB(); $fA->create()->getName(); $fB->create()->getName();
区别
简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)
工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
PREVIOUS设计模式(3)