设计模式之 : 简单工厂模式

来源:互联网 发布:软件开发测试基础知识 编辑:程序博客网 时间:2024/06/10 06:37

简单工厂模式示意图:
这里写图片描述

简单工厂模式优点:

代码具有一定的拓展性遵循了单一职责原则属于面向接口编程简单工厂模式提供了一个对外的类 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) {casecondition’: }判断,这无疑是十分灾难的,因为写好的代码我们最好不要再去碰它,因为很可能造成未知的原因,你说是不?
1 0