PHP设计模式之:工厂模式

 

<?php
abstract class Operation
{
    public numA = 0;
    public numB = 0;

    public function __construct($numA, $numB)
    {
        $this->numA = $numA;
        $this->numB = $numB;
    }
    abstract function getResult();
}

class OperationAdd extends Operation
{
    public function getResult()
    {
        return numA+numB;
    }
}

class OperationSub extends Operation
{
    public function getResult()
    {
        return numA - numB;
    }
}

class OperationMul extends Operation
{
    public function getResult()
    {
        return numA * numB;
    }
}

class OperationDiv extends Operation
{
    public function getResult()
    {
        if(numB == 0)
        {
            throw new Exception("除数不能为 0 。");
        }
        return (double) (numA / numB);
    }
}

/** *************************************** */
// 简单运算工厂类
class OperationFactory
{
    public static createOperate($operation, $numA, $numB)
    {
        switch($operation)
        {
            case '+':
                $oper = new OperationAdd($numA, $numB);
                break;
            case '-':
                $oper = new OperationSub($numA, $numB);
                break;
            case '*':
                $oper = new OperationMul($numA, $numB);
                break;
            case '/':
                $oper = new OperationDiv($numA, $numB);
                break;
        }
        return $oper;
    }

}

/** ************************ */
// 调用方式
$numA = 100;
$numB = 8;
$operation = '+';
$oper = OperationFactory::createOperate($operation, $numA, $numB);
echo $oper.getResult();

  

  

posted @ 2014-03-14 21:32  好记性还真不如烂笔头  阅读(168)  评论(0编辑  收藏  举报