PHP设计模式(一)工厂模式Factory实例详解【创建(2)


        GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。

三、区别 

工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。   
一个抽象工厂类,可以派生出多个具体工厂类。   
每个具体工厂类只能创建一个具体产品类的实例。

抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。   
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。

区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。   
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
两者皆可。 

四、简单工厂模式

建立一个工厂(一个函数或一个类方法)来制造新的对象。

分布说明引子:从无到有。客户自己创建宝马车,然后拿来用。

<?php
/**
 * 车子系列
 *
 */
Class BWM320{
function __construct($pa) {
 
}
}
Class BMW523{
  function __construc($pb){
}
}
/**
 * 
 * 客户自己创建宝马车
 */
class Customer {
 
  function createBMW320(){
    return new BWM320();
  }
 
  function createBMW523(){
    return new BMW523();
  }
} 

       客户需要知道怎么去创建一款车,客户和车就紧密耦合在一起了.为了降低耦合,就出现了工厂类,把创建宝马的操作细节都放到了工厂里面去,客户直接使用工厂的创建工厂方法,传入想要的宝马车型号就行了,而不必去知道创建的细节.这就是工业革命了:简单工厂模式

即我们建立一个工厂类方法来制造新的对象。如图:

产品类:

<?php
/**
 * 车子系列
 *
 */
abstract Class BWM{
  function __construct($pa) {
 
  }
}
Class BWM320 extends BWM{
  function __construct($pa) {
 
  }
}
Class BMW523 extends BWM{
  function __construc($pb){
 
  }
}

工厂类:

/**
 * 
 * 工厂创建车
 */
class Factory {
  static function createBMW($type){
    switch ($type) {
     case 320:
       return new BWM320();
     case 523:
       return new BMW523();
    //....
  }
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/1878.html