我是靠谱客的博主 留胡子水蜜桃,最近开发中收集的这篇文章主要介绍设计模式之 : 简单工厂模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

简单工厂模式优点:

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

最后

以上就是留胡子水蜜桃为你收集整理的设计模式之 : 简单工厂模式的全部内容,希望文章能够帮你解决设计模式之 : 简单工厂模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部