一個例子:
在實際應用中“注冊模式”會是什么樣子?在網(wǎng)絡(luò)應用程序開發(fā)中,通常我們只擁有一個數(shù)據(jù)庫連接。(因此,廣泛使用“單一模式”管理數(shù)據(jù)連接)但是,比如,由于歷史遺留原因:你的應用的客戶數(shù)據(jù)庫與你的在線訂單數(shù)據(jù)庫是分開的,你的DBA又把你的舊訂單轉(zhuǎn)移到一個存檔數(shù)據(jù)庫中,而且它與你的客戶數(shù)據(jù)庫及訂單(現(xiàn)有,最近)數(shù)據(jù)庫也是完全隔離的。那么,你怎么才能方便地管理三個數(shù)據(jù)庫連接而不用創(chuàng)建三個單獨的“單一模式”呢?答安就是使用“注冊模式”。
代碼:
class DbConnections extends Registry {}
注:當你在你的代碼中引入設(shè)計模式時,你的類名應該仍能反映他的角色和功能而沒有必要使用模式的名字。使用模式的名字注釋代碼對與你的項目以外的程序員交流非常有幫助。但是在你的項目內(nèi),類的名字應該適合項目本身而且能夠被項目成員很好的理解。雖然本章范例中的類名反映了設(shè)計模式的名字以及特定的實現(xiàn)方式,但是這并不是必須的。這僅僅是為了例子的清晰明了而不是好的命名規(guī)范。
DbConnections類是一個單件模式類,又繼承了注冊模式——DbConnections綜合了兩者的優(yōu)點。
以下的代碼片斷創(chuàng)建并在注冊模式類中存儲了對每一個數(shù)據(jù)庫的連接。
代碼:
//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'));
在其他類中將注冊模式類連同數(shù)據(jù)一起載入就可以使用不同的連接了。
代碼:
// 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'); } //... }
一個類依據(jù)客戶數(shù)據(jù)庫建模,另一個類依據(jù)歷史和現(xiàn)在的客戶訂單建模。取得正確的數(shù)據(jù)庫鏈接需要兩個步驟:找到注冊模式類,從中找出與給定的屬性(key)相匹配的對象。
出處:phpchina
責任編輯:bluehearts
上一頁 php設(shè)計模式介紹之注冊模式 [3] 下一頁 php設(shè)計模式介紹之注冊模式 [5]
◎進入論壇網(wǎng)絡(luò)編程版塊參加討論
|