php 簡單工廠模式

<?php
    /**
     * 簡單工廠模式
     * 定義一個工廠類,它可以根據參數的不同返回不同類的實例,被創建的實例通常都具有共同的父類。
     *
     * 1,定義抽象產品類,封裝各種對象的公有方法。
     * 2,定義具體產品類,並實現抽象產品類中的方法。
     * 3,定義工廠類,靜態方法,返回不同的具體產品對象。
     **/

    /**
     * 運算類
     **/
    abstract class Operation
    {
        abstract public function getValue($num1,$num2);
    }

    /**
     * 加法類
     **/
    class OperationPlus extends Operation
    {
        public function getValue($num1,$num2) {
            return $num1 + $num2;
        }
    }

    /**
     * 減法類
     **/
    class OperationSub extends Operation
    {
        public function getValue($num1,$num2) {
            return $num1 - $num2;
        }
    }

    /**
     * 乘法類
     **/
    class OperationMul extends Operation
    {
        public function getValue($num1,$num2) {
            return $num1 * $num2;
        }
    }

    /**
     * 除法類
     **/
    class OperationDiv extends Operation
    {
        public function getValue($num1,$num2) {
            try {
                if ( $num2 == 0 ) {
                    throw new Exception('除數不能爲0!');
                } else {
                    return $num1/$num2;
                }
            } catch (Exception $e) {
                echo $e->getMessage();
            }
        }
    }

    /**
     * 算法工廠類
     **/
    class Factory
    {
        public static function getOperationObj($operate) {
            switch ($operate) {
                case '+':
                    return new OperationPlus();
                    break;
                case '-':
                    return new OperationSub();
                    break;
                case '*':
                    return new OperationMul();
                    break;
                case '/':
                    return new OperationDiv();
                    break;
            }
        }
    }

    // 加法
    $operation = Factory::getOperationObj('+');
    echo $operation->getValue(10,11);

    // 減法
    $operation = Factory::getOperationObj('-');
    echo $operation->getValue(10,11);

    // 除法
    $operation = Factory::getOperationObj('/');
    echo $operation->getValue(10,0);
?>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章