php教程:php设计模式介绍之工厂模式(4)_PHP技巧_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

php教程:php设计模式介绍之工厂模式(4)

作者:黑客防线网安PHP教程基地 来源:黑客防线网安PHP教程基地 浏览次数:0

本篇关键词:模式工厂教程介绍
黑客防线网安网讯:  WebjxCom提示:在面向对象编程中,最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下,new操作符直接生成对象会带来一些问题。举例来说,许...
  WebjxCom提示:在面向对象编程中,最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的但是在一些情况下,new操作符直接生成对象会带来一些问题举例来说,许多类型对象的创造需要一系列的步骤:你可能需要计算或取得对象的初始设置;选择生成哪个子对象
  
  所有这些测试Color类功能的行为都在正常和期望的环境下实现的。但是每一个设计精良的类都必须考虑边界情况。例如,被送入构造器执行的数值如果是负数或者大于255的数值或者根本不是数值,结果会出现什么呢?一个好的类定义应该适应测试中的多种边界情况。
  
  functiontestColorBoundaries(){
  
  $color=&newColor(-1);
  
  $this->assertErrorPattern(‘/out.*0.*255/i’);
  
  $color=&newColor(1111);
  
  $this->assertErrorPattern(‘/out.*0.*255/i’);
  
  }
  
  注:assertErrorPattern
  
  assertErrorPattern()作用是:将产生的php错误进行正确的正则表达式匹配。如果这个错误不匹配指定的模式,将不通过测试。
  
  在那些测试的基础上,Color类将得到更进一步改进:
  
  classColor{
  
  var$r=0;
  
  var$g=0;
  
  var$b=0;
  
  functionColor($red=0,$green=0,$blue=0){
  
  $red=(int)$red;
  
  if($red<0||$red>255){
  
  trigger_error(“color‘$color’outofbounds,“
  
  .”pleasespecifyanumberbetween0and255”);
  
  }
  
  $this->r=$red;
  
  $green=(int)$green;
  
  if($green<0||$green>255){
  
  trigger_error(“color‘$color’outofbounds,“
  
  .”pleasespecifyanumberbetween0and255”);
  
  }
  
  $this->g=$green;
  
  $blue=(int)$blue;
  
  if($blue<0||$blue>255){
  
  trigger_error(“color‘$color’outofbounds,“
  
  .”pleasespecifyanumberbetween0and255”);
  
  }
  
  $this->b=$blue;
  
  }
  
  functiongetRgb(){
  
  returnsprintf(‘#%02X%02X%02X’,$this->r,$this->g,$this->b);
  
  }
  
  }
  
  这个代码通过了测试,但是这种"剪切和粘贴"的风格有点使人厌倦。在TDD,一个经验法则就是将编码最简单的实现,如果你两次需要相同的代码,可以将其改进,但不要复制代码。然而你往往需要三次或三次以上的一样代码。因此我们可以提取一个方法即重构实现这个工作。
  
  注:重构-提取方法
  
  当你的代码中有两个或者两个以上部分的代码相似的时候,可以将它们提取出来成为一个独立的方法,并按它的用途命名。当你的类的方法代码中频频出现相同的成分,提取代码作为一个方法是非常有用的。
  
  classColor{
  
  var$r=0;
  
  var$g=0;
  
  var$b=0;
  
  functionColor($red=0,$green=0,$blue=0){
  
  $this->r=$this->validateColor($red);
  
  $this->g=$this->validateColor($green);
  
  $this->b=$this->validateColor($blue);
  
  }
  
  functionvalidateColor($color){
  
  $check=(int)$color;
  
  if($check<0||$check>255){
  
  trigger_error(“color‘$color’outofbounds,“
  
  .”pleasespecifyanumberbetween0and255”);
  
  }else{
  
  return$check;
  
  }
  
  }
  
  functiongetRgb(){
  
  returnsprintf(‘#%02X%02X%02X’,$this->r,$this->g,$this->b);
  
  }
  
  }
  
  
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-17361-1.html
网站维护教程更新时间:2012-09-21 05:17:27  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer