2010年2月23日星期二

PHP工厂模式

重构-引入叁数对象
方法中如果有很多参数,常常变得很复杂,而且容易导致错误。可以引入一个封装参数的对象来替代一大堆的参数。举例来说,"start date" and "end date" 叁数可以用一个 DateRange 对象一起代替。

一个基类就是不能被直接实例化的类。 一个基础的类包含一个或更多的基础方法,这些方法必须在子类被覆盖。一旦所有的抽象方法被覆盖了, 子类也就产生了。
基类为许多相似的类创造了好的原型。

迟加载(Lazy Loading)的工厂, 使用工厂的另一个好处就是它具有迟加载的能力。这种情况常被用在:一个工厂中包括很多子类,这些子类被定义在单独的PHP文件内。
迟加载——在迟加载模式中是不预加载所有的操作(像包含PHP文件或者执行数据库查询语句),除非脚本中声明要加载。

实现迟加载的页面工厂(page factory)的代码可以写作:
[php]
class PageFactory {
function &getPage() {
$page = (array_key_exists('page', $_REQUEST)) ? strtolower($_REQUEST['page']): '';

switch ($page) {
case 'entry': $pageclass = 'Detail'; break;
case 'edit': $pageclass = 'Edit'; break;
case 'comment': $pageclass = 'Comment'; break;
default: $pageclass = 'Index';
}

if (!class_exists($pageclass)) {
require_once 'pages/' . $pageclass.'.php';
}

return new $pageclass;
}
}
[/php]
工厂模式, 它是一种代码中建立新对象的管理技术。可以把复杂对象的建立集中起来,甚至用不同的类代替不同的对象。最后,工厂模式支持OOP技术中的多态也是很重要的。

没有评论:

发表评论