解析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数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 PHP
php编写一个简单的路由类
Apr 13 PHP
PHP中strtotime函数使用方法详解
Nov 27 PHP
PHP版网站缓存加快打开速度的方法分享
Jun 03 PHP
PHP-redis中文文档介绍
Feb 07 PHP
解析php中的fopen()函数用打开文件模式说明
Jun 20 PHP
php curl选项列表(超详细)
Jul 01 PHP
PHP命名空间(Namespace)简明教程
Jun 11 PHP
php使用fopen创建utf8编码文件的方法
Oct 31 PHP
Thinkphp 5.0实现微信企业付款到零钱
Sep 30 PHP
PHP获取ttf格式文件字体名的方法示例
Mar 06 PHP
解决php extension 加载顺序问题
Aug 16 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实现登陆验证码(类似条行码状)
2006/10/09 PHP
Drupal7中常用的数据库操作实例
2014/03/02 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
2016/02/23 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
PHP+Redis开发的书签案例实战详解
2019/07/09 PHP
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
JQuery核心函数是什么及使用方法介绍
2016/05/03 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
js返回顶部实例分享
2016/12/21 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
python+mysql实现简单的web程序
2014/09/11 Python
理解Python中的类与实例
2015/04/27 Python
python深度优先搜索和广度优先搜索
2018/02/07 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
2018/07/10 Python
一个可以套路别人的python小程序实例代码
2019/04/09 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
python 实现控制鼠标键盘
2020/11/27 Python
英国豪华针织品牌John Smedley的在线销售商:The Outlet by John Smedley
2018/04/08 全球购物
智乐游戏测试笔试题
2014/05/21 面试题
国际贸易个人求职信范文
2014/01/04 职场文书
商业房地产广告语
2014/03/13 职场文书
学历公证书范本
2014/04/09 职场文书
项目申报专员岗位职责
2014/07/09 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书
创业计划书之花店
2019/09/20 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript