工厂模式
是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建对象,而不直接 使用 new。这样,如果您想要更改所创建的对象类型,只需更改该工厂即可。使用该工厂的所 有代码会自动更改。
实例一
IUser 接口定义用户对象应执行什么操作。IUser 的实现称为 User,UserFactory 工厂类 则创建 IUser 对象。此关系可以用图 1 中的 UML 表示。
<?php
interface IUser
{
function getName($id);
}
class User implements IUser
{
public $id;
public function __construct($id){}
public function getName($id)
{
if($id == 1)
{
return "sam";
}else if($id == 2){
return "braveryhui";
}else{
return "abc";
}
}
}
class Userfactory
{
public static function create($id)
{
return new User($id);
}
}
$o = Userfactory::create(2);
//这里不用new直接用类名饮用就可以了的原因如下
echo
($o->getName(2));
//输出"braveryhui"
当用:: 使用方法是被认为该方法为静态方法,
静态方法中不允许使用$this, 因为静态方法的调用不需要实例化, 而$this是实例化後才出现的,
所以静态方法类似于一个普通的函数
静态方法 是加栽到内存.而且还少了 NEW
的内存空间.速度相对快一点效率好点。
?>
实例二
变体使用工厂方法。类中的这些公共静态方法构造该类型的对象。如果
创建此类型的对象非常重要,此方法非常有用。例如,假设您需要先创建对象,然后设置许多属
性。此版本的工厂模式会将该进程封装在单个位置中,这样,不用复制复杂的初始化代码,也不 必将复制好的代码在在代码库中到处粘贴。
<?php
interface IUser
{
function getName($id);
}
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($id)
{
if($id == 1)
return "return one term !";
else
return "return two term..!!";
}
}
$obj = User::Load(1);
//直接调用加载类方法 用于初始的数据多的时候使用该方法封装
$obj2 = User::create();
echo $obj->getName(1);
echo $obj->getName(2);