解析PHP工厂模式的好处


Posted in PHP onJune 18, 2013

顾名思义,工厂是可以加工零件的,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();

得到的结果应该是输出“小明”。
PHP 相关文章推荐
很好用的PHP数据库类
May 27 PHP
PHP提取字符串中的图片地址[正则表达式]
Nov 12 PHP
PHP中替换换行符的几种方法小结
Oct 15 PHP
鸡肋的PHP单例模式应用详解
Jun 03 PHP
解析Extjs与php数据交互(增删查改)
Jun 25 PHP
phpstorm编辑器乱码问题解决
Dec 01 PHP
PHP开启opcache提升代码性能
Apr 26 PHP
php转换颜色为其反色的方法
Apr 27 PHP
Yii2中简单的场景使用介绍
Jun 02 PHP
PHP基于ORM方式操作MySQL数据库实例
Jun 21 PHP
php实现微信企业付款到个人零钱功能
Oct 09 PHP
PHP获取远程http或ftp文件的md5值的方法
Apr 15 PHP
PHP实现邮件群发的源码
Jun 18 #PHP
解析PHP跨站刷票的实现代码
Jun 18 #PHP
解析PHP SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 #PHP
360通用php防护代码(使用操作详解)
Jun 18 #PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
Jun 18 #PHP
解析PHP计算页面执行时间的实现代码
Jun 18 #PHP
php实现简单洗牌算法
Jun 18 #PHP
You might like
PHP源码之 ext/mysql扩展部分
2009/07/17 PHP
ucenter中词语过滤原理分析
2016/07/13 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
学习YUI.Ext 第三天
2007/03/10 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
2014/07/02 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
JavaScript将字符串转换成字符编码列表的方法
2015/03/19 Javascript
jquery SweetAlert插件实现响应式提示框
2015/08/18 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
AngularJS 支付倒计时功能实现思路
2017/06/05 Javascript
puppeteer实现html截图的示例代码
2019/01/10 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
2019/06/10 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
Python中安装easy_install的方法
2018/11/18 Python
python tkinter基本属性详解
2019/09/16 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
个人找工作自荐信格式
2013/09/21 职场文书
高一新生军训感言
2014/03/02 职场文书
国培计划培训感言
2014/03/11 职场文书
工程管理英文求职信
2014/03/18 职场文书
梅花魂教学反思
2014/04/25 职场文书
微笑服务演讲稿
2014/05/13 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
扬州个园导游词
2015/02/06 职场文书
李白故里导游词
2015/02/12 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书