如何实现PHP中“简单工厂模式”

介绍

这篇文章主要介绍”如何实现PHP中“简单工厂模式”,在日常操作中,相信很多人在如何实现PHP中“简单工厂模式”问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答“如何实现PHP中“简单工厂模式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

简单工厂模式:
①抽象基类:类中定义抽象一些方法,用以在子类中实现
②继承自抽象基类的子类:实现基类中的抽象方法
③工厂类:用以实例化对象

看完文章再回头来看下这张图,效果会比较好

如何实现PHP中“简单工厂模式”“> <br/> <br/>采用封装方式<br/> </p> <p>代码如下:</p> <p> <br/> & lt; ?php <br/>类Calc {<br/>/* * <br/> *计算结果<br/> * <br/> * @param int |美元浮动num1 <br/> * @param int |美元浮动num2 <br/> * @param字符串运算符<br/>美元* @return int |浮动<br/> */<br/>公共函数计算(num1美元,美元num2,运营商美元){<br/>尝试{<br/>=0美元的结果;<br/>开关(运营商){<br/> & # 39; + & # 39;: <br/>=num1 + num2美元美元的结果;<br/>打破;<br/> & # 39; & # 39;: <br/>=$ num1 - $ num2美元结果;<br/>打破;<br/> & # 39; * & # 39;: <br/> $=$ num1 * $ num2结果;<br/>打破;<br/> & # 39;/& # 39;: <br/> if ($ num2==0) {<br/>抛出新的异常(“除数不能为0,);<br/>} <br/> $=$ num1/$ num2结果;<br/>打破;<br/>返回$结果;<br/>} <br/>}捕捉(异常$ e) {<br/>回声“您输入有误:“。e→美元getMessage ();<br/>} <br/>} <br/>} <br/>测试=new Calc美元();<br/>//echo $测试→计算(2 3 & # 39;+ & # 39;);//打印:5 <br/>回波测试→美元计算(5 0 & # 39;/& # 39;);//打印:您输入有误:除数不能为0 <br/> ?比;<br/> </p> <p> <br/>优点:以上代码使用了面向对象的封装特性,只要有了包括这个类,其他页面就可以随便使用了<br/>缺点:无法灵活的扩展和维护<br/>比如:想要增加一个“求余”运算,需要在开关语句块中添加一个分支语句,代码需要做如下改动<br/>添加分支语句<br/> </p> <p>代码如下:</p> <p> <br/> & lt; ?php <br/>类Calc {<br/>公共函数计算(num1美元,美元num2,运营商美元){<br/>尝试{<br/>=0美元的结果;<br/>开关(运营商){<br/>//÷浴?br/> & # 39; % & # 39;: <br/>=num1% num2美元美元的结果;<br/>打破;<br/>//÷浴?br/>} <br/>}捕捉(异常$ e) {<br/>回声“您输入有误:“。e→美元getMessage ();<br/>} <br/>} <br/>} <br/> ?比;<br/> </p> <p> <br/>代码分析:用以上方法实现给计算器添加新的功能运算有以下几个缺点<br/>①需要改动原有的代码块,可能会在为了“添加新功能”而改动原有代码的时候,不小心将原有的代码改错了<br/>②如果要添加的功能很多,比如:“乘方& # 39;,“开方& # 39;,“对数& # 39;,“三角函数& # 39;,“统计& # 39;,或者添加一些程序员专用的计算功能,比如:,或者,不,Xor,这样就需要在开关语句中添加N个分支语句。想象下,一个计算功能的函数如果有二三十个案例分支语句,代码将超过一屏,不仅令代码的可读性大大降低,关键是,为了添加小功能,还得让其余不相关都参与解释,这令程序的执行效率大大降低<br/>解决途径:采用OOP的继承和多态思想<br/>简单工厂模式的初步实现<br/> </p> <p>代码如下:</p> <p> <br/> & lt; ?php <br/>/* * <br/> *操作类<br/> *因为包含有抽象方法,所以类必须声明为抽象类<br/> */<br/>抽象类操作{<br/>//抽象方法不能包含函数体<br/>抽象的公共职能getValue (num1, num2美元);//强烈要求子类必须实现该功能函数<br/>} <br/>/* * <br/> *加法类<br/> */<br/>类OperationAdd扩展操作{<br/>公共职能getValue (num1, num2美元){<br/>返回num1 + num2美元;<br/>} <br/>} <br/>/* * <br/> *减法类<br/> */<br/>类OperationSub扩展操作{<br/>公共职能getValue (num1, num2美元){<br/>返回num1 - num2美元;<br/>} <br/>} <br/>/* * <br/> *乘法类<br/> */<br/>类OperationMul扩展操作{<br/>公共职能getValue (num1, num2美元){<br/>返回num1 * num2美元;<br/>} <br/>} <br/>/* * <br/> *除法类<br/> */<br/>类OperationDiv扩展操作{<br/>公共职能getValue (num1, num2美元){<br/>尝试{<br/> if ($ num2==0) {<br/>抛出新的异常(“除数不能为0,);其他<br/>} {<br/>返回num1/$ num2美元;<br/>} <br/>}捕捉(异常$ e) {<br/>回声“错误信息:“。e→美元getMessage ();<br/>} <br/>} <br/>} <br/> ?比;<br/> </p> <p> <br/>这里采用了面向对象的继承特性,首先声明一个虚拟基类,在基类中指定子类务必实现的方法(getValue ()) <br/>分析:通过采用面向对象的继承特性,我们可以很容易就能对原有程序进行扩展,比如:“乘方& # 39;,“开方& # 39;,“对数& # 39;,“三角函数& # 39;,“统计& # 39;等等。<h2 class=如何实现PHP中“简单工厂模式”