简单工厂模式示意图:
    设计模式之 : 简单工厂模式 - 图1

    简单工厂模式优点:

    1. 代码具有一定的拓展性
    2. 遵循了单一职责原则
    3. 属于面向接口编程
    4. 简单工厂模式提供了一个对外的类 Client和实际工作的类,外界只需要传递特定的参数就可以调用不同的实际功能类,而不需要直接面对实际类与函数,拓展性大大增强。

    代码实例:
    简单工厂模式的初步实现

     <?php
         /**
          * 抽象基类
          * 操作类
          * 因为包含有抽象方法,所以类必须声明为抽象类(抽象类和接口类均可)
          */
         abstract class Operation{
             //抽象方法不能包含函数体
             abstract public function getValue($num1,$num2);//强烈要求子类必须实现该功能函数
         }
         //子类,可以写在不同文件中,switch后引入文件创建类
         /**
          * 加法类
          */
         class OperationAdd 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();
                 }
             }
         }
     ?>
    
    
    //工厂类
    <?php
        /**
         * 工程类,主要用来创建对象
         * 功能:根据输入的运算符号,工厂就能实例化出合适的对象
         *
         */
        class Factory{
            public static function createObj($operate){
                switch ($operate){
                    case '+':
                        return new OperationAdd();
                        break;
                    case '-':
                        return new OperationSub();
                        break;
                    case '*':
                        return new OperationSub();
                        break;
                    case '/':
                        return new OperationDiv();
                        break;
                }
            }
        }
        //使用
        $test=Factory::createObj('/');
        $result=$test->getValue(23,0);
        echo $result;
    ?>
    

    简单工厂模式不足:

    虽然它遵循了单一职责原则,但它违反了另一条同样很重要的原则:开放封闭原则。
    
    如果新增一个算法,那么我们还要修改 Factory类,增加一个switch ($type) {case’condition’: }判断,这无疑是十分灾难的,因为写好的代码我们最好不要再去碰它,因为很可能造成未知的原因,你说是不?