码迷,mamicode.com
首页 > 其他好文 > 详细

简单工厂模式

时间:2019-05-31 13:24:59      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:switch   get   工厂   opera   无法   title   十分   一个   divide   

技术图片
<?php
Function Operation($val1, $val2, $operate) {
    
    Switch($operate) {
        Case ‘+’ : $result = $val1+$val2;
        Break;
                Case ‘-’ : $result = $val1-$val2;
        Break;
                Case ‘*’ : $result = $val1*$val2;
        Break;
                Case ‘/’ : $result = $val1/$val2;
        Break;
        }
    Return $result;
}
技术图片

上述代码,乍一看还是不错的,采用了分支结构,简洁明了,对于一般的小型应用足够了。当我们要增加一个运算符时,需要再次修改上述主体代码。有没有办法再不修改主体代码的情况下,而实现功能改变了?

通过面向对象的思想,通过封装、继承、多态将程序的耦合性降到最低。
简单工厂模式

技术图片
<?php
/*定义接口类*/
Interface Operate {
    function get_Value($val1, $val2); //此方法必须实现
}

/*加法类*/
Class Operate_Add implements Operate {
    public function get_Value($val1, $val2) {
        return $val1 + $val2;
        }
}

/*减法类*/
Class Operate_Sub implements Operate {
    public function get_Value($val1, $val2) {
        return $val1 - $val2;
        }
}

/*乘法类*/
Class Operate_Multiply implements Operate {
    public function get_Value($val1, $val2) {
        return $val1 * $val2;
        }
}

/*除法类*/
Class Operate_Divide implements Operate {
    public function get_Value($val1, $val2) {
        return $val1 / $val2;
        }
}

使用工厂,定义工厂类
Class Factory {
    public static function Create_Operation($operate) {
        Switch($operate) {
            Case ‘+‘: return new Operate_Add;
            break;

            Case ‘-‘: return new Operate_Sub;
            break;

            Case ‘*‘: return new Operate_Multiply;
            break;

            Case ‘/‘: return new Operate_Divide;
            break;
        }

    }
}


$mys = Factory:: Create_Operation (‘+‘);
$result = $mys ->get_Value(1, 2);
技术图片

当我们要增加一个求余的算法时,只需要增加一个求余类:

技术图片
/*求余类*/
Class Operate_Remain implements Operate {
    public function get_Value($val1, $val2) {
        return $val1 % $val2;
        }
}
技术图片

修改工厂类即可,而无法修改具体的实现代码:

技术图片
Class Factory {
    Public function Create_Operation($operate) {
        Switch($operate) {
            Case ‘+’: return new Operate_Add;
                        break;
                }
                Switch($operate) {
            Case ‘-’: return new Operate_Sub;
                        break;
                }
                Switch($operate) {
            Case ‘*’: return new Operate_ Multiply;
                        break;
                }
        Switch($operate) {
            Case ‘/’: return new Operate_ Divide;
                        break;
                }
                Switch($operate) {
            Case ‘%’: return new Operate_ Remain;
                        break;
                }
        }
}
技术图片

看了这么多代码,其实说白了就一个道理:根据接收的条件,选择合适的类
这种方法与PHP web开发中MVC模式十分类似:根据URI参数,选择不同的控制器类和实现方法。
其实在PHP数据库设计时也可用到工厂模式,根据不同的参数,选择不同的数据库类。

来自:https://www.cnblogs.com/fancing/p/6394160.html

简单工厂模式

标签:switch   get   工厂   opera   无法   title   十分   一个   divide   

原文地址:https://www.cnblogs.com/qiminghaonan/p/10954721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!