联系电话:0755-27515592
最新动态:

PHP教程

你的位置: 首页>>智慧亿恩>>PHP教程

PHP中简单工厂模式实例讲解

点击数:12362015-07-16 15:20:16 来源: 外贸网站建设,深圳外贸网站建设,深圳网站建设,外贸商城网站制作-亿恩科技

新闻摘要:PHP中简单工厂模式实例讲解,简单的讲述了一下大家可参考一下. 简单工厂模式: ①抽象基类:类中定义抽象一些方法,用以在子类中实现 ②继承自抽象基类的子类:实现基类中的抽象方法

PHP中简单工厂模式实例讲解,简单的讲述了一下大家可参考一下.

简单工厂模式:

①抽象基类:类中定义抽象一些方法,用以在子类中实现

②继承自抽象基类的子类:实现基类中的抽象方法

③工厂类:用以实例化对象

采用封装方式,代码如下:

  1. <?php 
  2.     class Calc{ 
  3.         /** 
  4.          * 计算结果 
  5.          * 
  6.          * @param int|float $num1 
  7.          * @param int|float $num2 
  8.          * @param string $operator 
  9.          * @return int|float 
  10.          */ 
  11.         public function calculate($num1,$num2,$operator){ 
  12.             try { 
  13.                 $result=0; 
  14.                 switch ($operator){ 
  15.                     case '+'
  16.                         $result$num1+$num2
  17.                         break
  18.                     case '-'
  19.                         $result$num1-$num2
  20.                         break
  21.                     case '*'
  22.                         $result$num1*$num2
  23.                         break
  24.                     case '/'
  25.                         if ($num2==0) { 
  26.                             throw new Exception("除数不能为0"); 
  27.                         } 
  28.                         $result$num1/$num2
  29.                         break
  30.                     return $result
  31.                 } 
  32.             }catch (Exception $e){ 
  33.                 echo "您输入有误:".$e->getMessage(); 
  34.             }//开源代码vcphp.com 
  35.         } 
  36.     } 
  37.     $test=new Calc(); 
  38. //    echo $test->calculate(2,3,'+');//打印:5 
  39.     echo $test->calculate(5,0,'/');//打印:您输入有误:除数不能为0 
  40. ?> 

优点:以上代码使用了面向对象的封装特性,只要有了include这个类,其他页面就可以随便使用了.

缺点:无法灵活的扩展和维护

比如:想要增加一个“求余”运算,需要在switch语句块中添加一个分支语句,代码需要做如下改动,添加分支语句,代码如下:

  1. <?php 
  2.     class Calc{ 
  3.         public function calculate($num1,$num2,$operator){ 
  4.             try { 
  5.                 $result=0; 
  6.                 switch ($operator){ 
  7.                     //......省略...... 
  8.                     case '%'
  9.                         $result$num1%$num2
  10.                         break
  11.                     //......省略...... 
  12.                 } 
  13.             }catch (Exception $e){ 
  14.                 echo "您输入有误:".$e->getMessage(); 
  15.             } 
  16.         } 
  17.     } 
  18. ?> 

代码分析:用以上方法实现给计算器添加新的功能运算有以下几个缺点.

①需要改动原有的代码块,可能会在为了“添加新功能”而改动原有代码的时候,不小心将原有的代码改错了.

②如果要添加的功能很多,比如:‘乘方’,‘开方’,‘对数’,‘三角函数’,‘统计’,或者添加一些程序员专用的计算功能,比 如:And,Or,Not,Xor,这样就需要在switch语句中添加N个分支语句,想象下,一个计算功能的函数如果有二三十个case分支语句,代码 将超过一屏,不仅令代码的可读性大大降低,关键是,为了添加小功能,还得让其余不相关都参与解释,这令程序的执行效率大大降低.

解决途径:采用OOP的继承和多态思想.

简单工厂模式的初步实现,代码如下:

  1. <?php 
  2.      /** 
  3.       * 操作类 
  4.       * 因为包含有抽象方法,所以类必须声明为抽象类 
  5.       */ 
  6.      abstract class Operation{ 
  7.          //抽象方法不能包含函数体 
  8.          abstract public function getValue($num1,$num2);//强烈要求子类必须实现该功能函数 
  9.      } 
  10.      /** 
  11.       * 加法类 
  12.       */ 
  13.      class OperationAdd extends Operation { 
  14.          public function getValue($num1,$num2){ 
  15.              return $num1+$num2
  16.          } 
  17.      } 
  18.      /** 
  19.       * 减法类 
  20.       */ 
  21.      class OperationSub extends Operation { 
  22.          public function getValue($num1,$num2){ 
  23.              return $num1-$num2
  24.          } 
  25.      } 
【责任编辑:(Top) 返回页面顶端
贴心
全国7×24小时客服热线
安全
病毒杀除率高于99%
稳定
网站可用性高于99.9%
实力
服务68家上市企业及集团公司
亿恩科技手机站
关注亿恩科技微信

亿恩科技—企业信息化一站式服务专家


Copyright © 2008- 深圳市亿恩科技有限公司版权所有 粤ICP备15056041号

联系我们 | 常见问题 | 在线留言 | 支付方式 | 软件开发 | 我的观点 | 资质荣誉 | 服务流程