简单工厂模式

Posted qiminghaonan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单工厂模式相关的知识,希望对你有一定的参考价值。

技术图片
<?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

以上是关于简单工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习——简单工厂模式工厂模式抽象工厂模式

PHP面向对象之选择工厂和更新工厂

设计模式-简单工厂工厂方法模式抽象工厂模式详解

设计模式之简单工厂模式

C++工厂模式(简单工厂工厂方法抽象工厂)

C++工厂模式(简单工厂工厂方法抽象工厂)