工厂模式

  • 简单工厂模式(Simple Factory)

定义

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

实例

createCar();
$bicycle->driveTo('XiaoMen');
//输出:string(7) "XiaoMen" 
$bicycle = $factory->createBicycle();
$bicycle->driveTo('FuJian');
//输出:string(6) "FuJian"
?>
  • 工厂方法模式 ( Factory Method)

概念

工厂方法模式 和 简单工厂模式非常接近,唯一不同的是,允许有多个工厂存在,相当于给工厂分组。

规则

  1. 每个工厂必须继承一个抽象类或接口类, 使之成为多态。
  2. 每个产品也必须继承一个抽象类或接口类,也使之成为多态。
  3. 每个工厂必须有一个工厂方法返回产品的实例。

实例

_numberA = $num;
    }

    /**
     * 获取成员A
     *
     * @return double 数字
     */
    public function getNumberA(){
        return $this->_numberA;
    }

    /**
     * 设置成员B
     *
     * @param double $num 数字
     * @return void
     */
    public function setNumberB($num){
        $this->_numberB = $num;
    }

    /**
     * 获取成员B
     *
     * @return double 数字
     */
    public function getNumberB(){
        return $this->_numberA;
    }

    /**
     * 获取运算结果
     *
     * @return double 数字
     */
    public function getResult(){
        return null;
    }
}  /*}}}*/

// 加法类
class OperationAdd extends Operation
{  /*{{{*/

    /**
     * 获取运算结果
     *
     * @return double 数字
     */
    public function getResult(){
        return $this->_numberA + $this->_numberB;
    }
}  /*}}}*/

// 减法类
class OperationSub extends Operation
{  /*{{{*/

    /**
     * 获取运算结果
     *
     * @return double 数字
     */
    public function getResult(){
        return $this->_numberA - $this->_numberB;
    }
}  /*}}}*/

//运算工厂
interface IFactory
{/*{{{*/
    public function createOperate();
}/*}}}*/

//加法工厂
class AddFactory implements IFactory
{/*{{{*/

    public function createOperate()
    {
        return new  OperationAdd();
    }
}/*}}}*/

//减法工厂
class SubFactory implements IFactory
{/*{{{*/
    public function createOperate()
    {
        return new OperationSub();
    }
}/*}}}*/

class Client
{/*{{{*/
    public static function main($a, $b)
    {
        //简单工厂的switch case 放到了客户端了
        $factory = new AddFactory();
        $add = $factory->createOperate();
        // 设置数字A
        $add->setNumberA($a);

        // 设置数字B
        $add->setNumberB($b);

        // 运算
        echo $add->getResult()."\r\n";
    }
}/*}}}*/

Client::main(5,3);
//输出:8
?>

你可能感兴趣的:(工厂模式)