有一种工厂模式的变体使用工厂方法。类中的这些公共静态方法构造该类型的对象。如果
创建此类型的对象非常重要,此方法非常有用。例如,假设您需要先创建对象,然后设置
许多属性。此版本的工厂模式会将该进程封装在单个位置中,这样,不用复制复杂的初始
化代码,也不必将复制好的代码在在代码库中到处粘贴。
清单 2 显示使用工厂方法的一个示例。
清单 2. Factory2.php
<?php
interface IUser
{
function getName();
}
class User implements IUser
{
public static function Load( $id )
{
return new User( $id );
}
public static function Create( )
{
return new User( null );
}
public function __construct( $id ) { }
public function getName()
{
return "Jack";
}
}
$uo = User::Load( 1 );
echo( $uo->getName()."\n" );
?>
这段代码要简单得多。它仅有一个接口
IUser
和一个实现此接口的
User
类。
User
类
有两个创建对象的静态方法。此关系可用图 2
中的 UML 表示。