php教程:php设计模式介绍之注册模式(4)

http://www.itjxue.com  2015-07-17 08:20  来源:未知  点击次数: 

一个例子

在实际应用中“注册模式”会是什么样子?在网络应用程序开发中,通常我们只拥有一个数据库连接。(因此,广泛使用“单一模式”管理数据连接)但是,比如,由于历史遗留原因:你的应用的客户数据库与你的在线订单数据库是分开的,你的DBA又把你的旧订单转移到一个存档数据库中,而且它与你的客户数据库及订单(现有,最近)数据库也是完全隔离的。那么,你怎么才能方便地管理三个数据库连接而不用创建三个单独的“单一模式”呢?答安就是使用“注册模式”。

代码:

class DbConnections extends Registry {}

注:当你在你的代码中引入设计模式时,你的类名应该仍能反映他的角色和功能而没有必要使用模式的名字。使用模式的名字注释代码对与你的项目以外的程序员交流非常有帮助。但是在你的项目内,类的名字应该适合项目本身而且能够被项目成员很好的理解。虽然本章范例中的类名反映了设计模式的名字以及特定的实现方式,但是这并不是必须的。这仅仅是为了例子的清晰明了而不是好的命名规范。

DbConnections类是一个单件模式类,又继承了注册模式——DbConnections综合了两者的优点。

以下的代码片断创建并在注册模式类中存储了对每一个数据库的连接。

代码:

//initial setup, somewhere near the start of your script
$dbc =& DbConnections::getInstance();
$dbc->set(
'contacts',
new MysqlConnection('user1', 'pass1', 'db1', 'host1'));
$dbc->set(
'orders',
new MysqlConnection('user2', 'pass2', 'db2', 'host2'));
$dbc->set(
'archives',
new MysqlConnection('user3', 'pass3', 'db3', 'host3'));

在其他类中将注册模式类连同数据一起载入就可以使用不同的连接了。

代码:

// domain model classes
class Customer {
var $db;
function Customer() {
$dbc =& DbConnections::getInstance();
$this->db =& $dbc->get('contacts');
}
//...
}
class Orders {
var $db_cur;
var $db_hist;
function Contact() {
$dbc =& DbConnections::getInstance();
$this->db_cur =& $dbc->get('orders');
$this->db_hist =& $dbc->get('archive');
}
//...
}

一个类依据客户数据库建模,另一个类依据历史和现在的客户订单建模。取得正确的数据库链接需要两个步骤:找到注册模式类,从中找出与给定的属性(key)相匹配的对象。

(责任编辑:IT教学网)

更多