码迷,mamicode.com
首页 > Web开发 > 详细

php设计模式-工厂模式

时间:2015-08-31 19:35:09      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

工厂模式精髓:只要是可以根据不同的参数生成不同的类实例,那么就符合工厂模式的设计思想

一:工厂模式的优点

  工厂模式的最大优点在于创建对象上面,就是把创建对象的过程封装起来,这样可以提高复用性,减少耦合关系重,牵一发动其他部分代码。
  eg:在不使用工厂模式的时候:假如很多地方调用类User,我们就会在需要的地方这样子写:new User(),假设某天需要把User类的名称修改,那就是个灾难。

二:我们什么时候要使用工厂模式?

  比如我们做支付接口的时候,未来可能对应不同的支付网关:支付宝、财付通、网银在线等。方便未来扩展,设计成工厂模式。

  定一个专门生产网关接口的工厂,抽象出来,做成接口形式,让所有的子类都要实现它的接口。以后加一个支付方式,要使用哪一种支付方式,改变一下参数即可。

  

  工厂模式我想到的一个典型的应用就是:php可能要链接mysql,sqlserver 或oracle,还有其他什么数据库。那么做一个抽象的数据库类,
  这个类就是一个工厂类,专门负责产生不同的对象。
  这样子做很方便扩展。我们在直接链接数据库的时候,不是使用代码new Mysql($host,$username,$password,$dbname)的形式
  而可以动态生成一个连接数据库的实例。可以是mysql,也可以是连接oracle的。

class DbFactory {

  function static factory($db_class_name) {

    $db_class_name = strtolower($db_class_name);

    if (include_once ‘Drivers/‘ . $db_class_name . ‘.php‘) {

      $classname = ‘Driver_‘ . $db_class_name;
      return new $db_class_name;
    } else {
      throw new Exception(‘对应的数据库类没找到‘);
    }
  }
}

DbFactory::factory("mysql");

DbFactory::factory("oracle");

  

可参考TP框架中Db.class.php就是一个工厂类(也可以叫做数据库中间层,之所以叫做中间层,是因为可以操作mysql、oracle等各数据库。而这个类就是中间层作用,屏蔽掉具体的实现。让程序员可以不改动原来的查询代码。中间层来对接mysql、oracle等数据库。

定义以下几个类:

UserFactory 用户工厂类,负责生成不同的用户类
User:用户类的基类,所有用户类都是继承这个类
不同角色的类:注册用户类、匿名用户类、管理员用户类

php设计模式-工厂模式

标签:

原文地址:http://www.cnblogs.com/ID890/p/890_gcms.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!