设计模式(4) 工厂方法模式

 

创建型模式

Factory (对象创建型)

目的

定义一个用于创建对象的接口,让子类决定实例哪个类,类的实例延迟到其子类。

额外效果

1.为子类提够挂钩
2.连接平行类的层次

Builder

实现

方式
  1. 基类实现具体的创建函数,子类继承扩展
  2. 基类抽象创建函数,子类去实现
  3. 利用参数,创建对象 (简单工厂模式)

     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();
    

区别

简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)
工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)