php 工厂模式运用实例,PHP工厂模式的实例分析

php的工厂模式,可以方便的使用一个静态的工厂方法来实例化某一个类。

一般实例化一个类,会给它一些参数,以便在其构析时,可以根据不同的参数反馈出需要的结果。

来看一个具体的例子吧,

一个User类:

复制代码 代码示例:

interface IUser{

function getName();

function getAge();

}

class User implements IUser{

protected $_name;

protected $_age;

function __construct($name, $age){

$this->_name = $name;

$this->_age = (int)$age;

}

function getName(){

return $this->_name;

}

function getAge(){

return $this->_age;

}

}

?>

如果要实例化这个类,可以这样:

复制代码 代码示例:

$u = new User(‘小明‘,19);

一般如果这个类很少使用,那么这样做没什么太大影响,也非常好。

如果想给这个类增加一个归类,把小明放入学生组,修改下类代码实现非常容易,但如果这个类在想修改之前在很多文件地方多次的实例化了,那么想为其增加一个参数就会变的非常烦琐,因为需要替换成:

复制代码 代码示例:

$u = new User(‘小明‘,19,‘学生‘);

当然,也可以通过在__construct函数中进行默认值设置来避免这种重复劳动,但事实上从代码优雅角度来说这样很不好,设想我们有一个工厂方法可以通过一个标识来对应一组参数,并把这个参数存放在某个文本文档或是直接以数组的形式存放在工厂类中,在调用User类的时候就会变的轻松许多,即便是需要增减参数属性也不需要到处进行代码的替换。

以下就是一个工厂类(也可以直接将方法存放在User类中),代码如下:

复制代码 代码示例:

/**

* php工厂设计模式的实例

* edit www.jbxue.com

*/

interface IUser{

function getName();

function getAge();

}

class User implements IUser{

protected $_group;

protected $_name;

protected $_age;

function __construct($name, $age, $group){

$this->_group = $group;

$this->_name = $name;

$this->_age = (int)$age;

}

function getName(){

return $this->_name;

}

function getAge(){

return $this->_age;

}

}

class Fuser{

private static $group = array(

array(‘小明‘,19,‘学生‘),

array(‘小王‘,19,‘学生‘)

);

static function create($id){

list($name, $age, $group) = self::$group[(int)$id];

return new User($name, $age, $group);

}

}

//调用示例

echo Fuser::create(0)->getName();

?>

输出结果:

“小明”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值