快速业务通道

php设计模式介绍之注册模式

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22

“注册模式”的get()方法会返回一个对象引用。类似的,set()方法的$obj 参数要求得到一个对象引用并被赋值$this->_store[$key].。get()和set()方法的联合恰当使用能够 满足assertReference()测试。

作者注:

“注册模式”的get() Registry::get()方法的代码应该写成@$this->_store[$key;]的形式,但是最好避免使用错误抑制符 ,使用错误抑制符的代码会变的摸棱两可,你需要花费额外的时间去了解你是否会再次访问这段代码。 array_key_exists()方法指出了应该避免的错误。

PHP5中,对象句柄(引用)带来了革命性的变 化——你可以从对象引用的困境中解脱出来。事实上PHP5中注册模式的实现变的简单多了。 因为你再也不用担心因为没有通过引用传递对象而引起致命错误的情况下使用联合数组。在PHP5中,你 甚至能在注册模式中混和使用对象和变量。

一个例子:

在实际应用中“注册模式 ”会是什么样子?在网络应用程序开发中,通常我们只拥有一个数据库连接。(因此,广泛使用 “单一模式”管理数据连接)但是,比如,由于历史遗留原因:你的应用的客户数据库与你 的在线订单数据库是分开的,你的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)相匹配的 对象。

将注册模式实现为单件模式:

如前所述,把注册模式实现为单件模式有很多实现 方式。

第一步,将注册模式实现为单件对象,(作者注:我们在第四章——The Singleton Pattern末尾简单讨论过)。

按照这种设计,注册模式类的任何一

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号