一个计算器引发的思考

今天我们来说一个简单的需求,一个简单的计算器,实现加减乘除即可。界面我们暂且略过,比较简单,提交过来的有两个数字和一个运算符。

 

基础数据如下:

$number_1 = $_POST['number_1'];
$number_2 = $_POST['number_2'];
$operator = $_POST['operator'];

 

一、要开发一个计算器软件,过程式的开发流程如下:

switch($operator)
{
    case '+':
        $result = $number_1 + $number_2;
        break;
    case '-':
        $result = $number_1 - $number_2;
        break;
    case '*':
        $result = $number_1 * $number_2;
        break;
    case '/':
        $result = $number_1 / $number_2;
        break;
}

优势是什么?显然,优势就是非常容易理解,纯过程化的编写方式,非常直观。

弊端是什么?如果后面再加新的运算符,那么我们会不断的更新这个运算方法,不利于维护。

 

二、优化后的计算器软件,面向对象式的开发流程如下:

//抽象运算类
abstract class Operator
{
    abstract function getResult($number_1,$number_2);
}

//加法运算类
class Plus extends Operator
{
    function getResult($number_1, $number_2)
    {
        return $number_1 + $number_2;
    }
}

//减法运算类
class Minus extends Operator
{
    function getResult($number_1, $number_2)
    {
        return $number_1 - $number_2;
    }
}

//乘法运算类
class Multiply extends Operator
{
    function getResult($number_1, $number_2)
    {
        return $number_1 * $number_2;
    }
}

//除法运算类
class Devide extends Operator
{
    function getResult($number_1, $number_2)
    {
        try{
            $result = $number_1 / $number_2;
        }catch(\Exception $e){
            $result = $e->getMessage();
        }

        return $result;
    }
}

//简单工厂类
class Factory
{
    public static function createOperator($operator)
    {
        $Operator = null;
        switch($operator)
        {
            case '+':
                $Operator = new Plus();
                break;
            case '-':
                $Operator = new Minus();
                break;
            case '*':
                $Operator = new Multiply();
                break;
            case '/':
                $Operator = new Devide();
                break;
        }

        return $Operator;
    }
}

优势是什么?我们后面要是再增加其它的运算,只需新增一个运算类,然后在简单工厂类中加代码处理即可,维护方便,且可以不同的方法由不同的人来进行处理,自己完成自己的一块就可以了,不会影响到别人的代码。

弊端是什么?代码量相对要大很多,且比较抽象,不够直观。

 

三、UML图

posted @ 2018-06-26 16:11  宫丫  阅读(174)  评论(0编辑  收藏  举报