您的位置:首页 > 编程语言 > PHP开发

PHP工厂模式的好处【实例化对象的封装处理】

2013-01-26 23:03 288 查看


PHP工厂模式的好处

顾名思义,工厂是可以加工零件的,PHP程序中的工厂模式也有相同的功能,可以方便的使用一个静态的工厂方法来实例化某一个类,那么这样做的好处是什么呢?初学PHP的设计模式,以下是我个人的理解

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

举例说明,以下是一个User类,非常简单:

<?php

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;

}

}

?>

我们如果要实例化这个类就要这样:

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

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

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

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

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

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();

转载 http://www.phpchina.com/archives/view-42530-1.html
读后感: PHP工厂模式,利用工程生产元部件的原理,我打个简单的比方:一个工厂有很多个生产流水线,那么每一个流水线就对应一个类,由于流水线生产出很多的产品(实例化对象),但由于流水线的流程可能会调整,这样就需要把以前所有生产的产品统一进行处理,如果以前生产的产品都分散在各个地方,处理相对繁琐。这样就提出了工厂化模式,把所有的实例化对象都存储在一个类中,这样需要修改的时候就直接对类进行统一处理即可。

当初始化对象时,直接对该对象类的工厂进行插入,对象可以保存在数组,文件或者数据库之内,这样该工厂类与存储对象的文件形成一一映射的关系,可以理解为java设计中的hibernate设计。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: