解析PHP工厂模式的好处

 更新时间:2013年06月18日 16:25:44   作者:  
本篇文章是对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;
   }
}
?>

我们如果要实例化这个类就要这样:
$u = new User(‘小明‘,19);
一般如果这个类很少使用,那么这样做没什么太大影响,也非常好。
突然我想给这个类增加一个归类,把小明放入学生组,修改下类代码实现非常容易,但如果这个类在我们想修改之前在很多文件地方多次的实例化了,那么想为其增加一个参数就会变的非常烦琐,因为需要替换成:
$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();

得到的结果应该是输出“小明”。

相关文章

  • 浅析memcache启动以及telnet命令详解

    浅析memcache启动以及telnet命令详解

    本篇文章是对memcache启动以及telnet命令进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php2html php生成静态页函数

    php2html php生成静态页函数

    生成静态函数 这里要用到的路径为服务器绝对路径; 若给定的路径目录不存在则自动创建
    2008-12-12
  • php获取后台Job管理的实现代码

    php获取后台Job管理的实现代码

    从数据库中取出job 队列 创建新的进程进行执行 等待job 结束
    2011-06-06
  • php画图实例

    php画图实例

    这篇文章主要介绍了php画图的方法,实例讲述了基于PHP绘制图像与文字的方法,需要的朋友可以参考下
    2014-11-11
  • thinkPHP5实现的查询数据库并返回json数据实例

    thinkPHP5实现的查询数据库并返回json数据实例

    这篇文章主要介绍了thinkPHP5实现的查询数据库并返回json数据功能,结合实例形式分析了thinkPHP5数据库查询及json格式数据简单操作技巧,需要的朋友可以参考下
    2017-10-10
  • PHP实现自动识别Restful API的返回内容类型

    PHP实现自动识别Restful API的返回内容类型

    这篇文章主要介绍了PHP实现自动识别Restful API的返回内容类型,并实现自动自动渲染成 json、xml、html、serialize、csv、php等数据格式输出,需要的朋友可以参考下
    2015-02-02
  • PHP 身份验证方面的函数

    PHP 身份验证方面的函数

    写了几个身份证方面的函数,个人感觉挺有用的,特别是在网络问卷调查时,对个人信息里的身份证进行验证很有用,但是应者寥寥,还是收在自己的blog里算了。
    2009-10-10
  • php打印输出棋盘的实现方法

    php打印输出棋盘的实现方法

    这篇文章主要介绍了php打印输出棋盘的实现方法,以实例形式分析了两种不同的实现方法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • php实现可逆加密的方法

    php实现可逆加密的方法

    这篇文章主要介绍了php实现可逆加密的方法,借鉴了discuz的加密原理实现通过密钥进行可逆加密的功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • php获取某个目录大小的代码

    php获取某个目录大小的代码

    大致就是不知道目录下面又多少层目录, 也不知道又多少文件, 需要统计占用空间大小, 这个可以用在 相册/数据库占用/网络U盘 等程序中.
    2008-09-09

最新评论