首页 > PHP教程 > php开发知识文章

PHP设计模式之工厂模式详解

这篇文章主要介绍了PHP设计模式之工厂模式详解,简单介绍了工厂模式的概念、原理并结合实例形式总结分析了工厂模式的具体定义及使用方法,需要的朋友参考下

工厂模式

工厂模式的优点就在创建对象上。建立一个工厂(即一个函数或一个类方法)来制造新的对象,它的任务就是把对象的创建过程都封装起来,

 

这样创建对象就不是使用new的形式了,而是定义一个方法,用于创建对象实例。

工厂模式增加代码的复用,减少代码耦合关系。通俗的说,以前创建一个对象要使用new,现在使用工厂模式就把这个过程封装起来了。

假设不使用工厂模式:那么很多地方调用类a,代码就会这样子创建一个实例:new a(),假设我们把a类的名称修改,意味着很多创建实例的代码都要修改。

数据库连接

很多地方会需要连接数据库,那么就将连接数据库的方法封装在一个类中,方便在其他类中通过类名调用。

关键:根据不同的参数生成不同的类实例,那么就符合工厂模式的设计思想。

工厂模式一个典型的应用就是:php可能要链接mysql,也可能要链接sqlserver,还有其他类型的数据库。

那么我们就做一个抽象的数据库类,这个类就是一个工厂类,专门负责产生不同的对象。

这样我们在连接数据库的时候,不是使用代码 new Mysql($host,$username,$password,$dbname) 的形式,

而是动态生成一个连接数据库的实例,是mysql,也能是连接oracle的。

class DbFactory
{
static function 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");

在thinkphp框架中也有对应的实现:

Db.class.php就是一个工厂类,也叫数据库中间层,能操作mysql、oracle等数据库。而这个类就是中间层作用,屏蔽掉具体数据库的实现。

让程序员不改动原来的查询代码。中间层来对接mysql、oracle等数据库。

Db.class.php中有个factory()方法来创建不同的数据库实例

public function factory($db_config = '')
{
// 读取数据库配置
$db_config = $this->parseConfig($db_config);
if (empty($db_config['dbms'])) throw_exception(L('_NO_DB_CONFIG_'));
// 数据库类型
$this->dbType = ucwords(strtolower($db_config['dbms']));
$class = 'Db' . $this->dbType;
if (is_file(CORE_PATH . 'Driver/Db/' . $class . '.class.php')) {
// 内置驱动
$path = CORE_PATH;
} else {
// 扩展驱动
$path = EXTEND_PATH;
}
// 检查驱动类
if (require_cache($path . 'Driver/Db/' . $class . '.class.php')) {
$db = new $class($db_config);
// 获取当前的数据库类型
if ('pdo' != strtolower($db_config['dbms'])) {
$db->dbType = strtoupper($this->dbType);
} else {
$db->dbType = $this->_getDsnType($db_config['dsn']);
}
if (APP_DEBUG) $db->debug = true;
} else {
// 类没有定义
throw_exception(L('_NOT_SUPPORT_DB_') . ': ' . $db_config['dbms']);
}
return $db;
}

支付接口的应用

对应不同的支付网关:支付宝、财付通、网银在线等,方便未来扩展,设计成工厂模式。

定一个专门生产网关接口的工厂,抽象出来,做成接口形式,让所有的子类都要实现它的接口。

以后加一个支付方式,要使用哪一种支付方式,改变一下参数即可。

工厂设计模式

以上就是本文PHP设计模式之工厂模式详解的全部内容,希望本文所述对大家PHP程序设计有所帮助。

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。