《PHP设计模式介绍》第三章 工厂模式(4)_PHP教程
推荐:《PHP设计模式介绍》第二章 值对象模式
在所有的最简单的程序中,大多数对象都有一个标识,一个重要的商业应用对象,例如一个Customer或者一个SKU,有一个或者更多的属性---id,name,email地址,这样可以把它从同一个类的其他实例区分开
所有这些测试Color类功能的行为都在正常和期望的环境下实现的。但是每一个设计精良的类都必须考虑边界情况。例如, 被送入构造器执行的数值如果是负数,或者大于255的数值,或者根本不是数值,结果会出现什么呢?一个好的类定义应该适应测试中的多种边界情况。
function testColorBoundaries() { $color =& new Color(-1); $this->assertErrorPattern(‘/out.*0.*255/i’); $color =& new Color(1111); $this->assertErrorPattern(‘/out.*0.*255/i’); } |
注:assertErrorPattern
assertErrorPattern() 作用是:将产生的php错误进行正确的正则表达式匹配。如果这个错误不匹配指定的模式, 将不通过测试。
在那些测试的基础上,Color类将得到更进一步改进:
class Color { |
注:重构 - 提取方法
当你的代码中有两个或者两个以上部分的代码相似的时候, 可以将它们提取出来成为一个独立的方法,并按它的用途命名。当你的类的方法代码中频频出现相同的成分,提取代码作为一个方法是非常有用的。
class Color { var $r=0; var $g=0; var $b=0; function Color($red=0, $green=0, $blue=0) { $this->r = $this->validateColor($red); $this->g = $this->validateColor($green); $this->b = $this->validateColor($blue); } function validateColor($color) { $check = (int)$color; if ($check < 0 || $check > 255) { trigger_error(“color ‘$color’ out of bounds, “ .”please specify a number between 0 and 255”); } else { return $check; } } function getRgb() { return sprintf(‘#XXX’, $this->r, $this->g, $this->b); } } |
分享:《PHP设计模式介绍》第一章 编程惯用法
学习一门新的语言意味着要采用新的惯用法。这章将介绍或者可能重新强调一些惯用法。你会发现这些惯用法在你要在代码中实现设计模式时候是非常有用的。
在这里总结的许多编程惯用法都是很值得

- 相关链接:
- 教程说明:
PHP教程-《PHP设计模式介绍》第三章 工厂模式(4)
。