介紹php設計模式中的原廠模式

來源:互聯網
上載者:User

問題

你如何能輕鬆方便地建立這麼" 複雜 " 的對象即操作中不需要粘貼複製呢?

解決方案

建立一個工廠(一個函數或一個類方法)來製造新的對象。為了理解工廠的用處, 試想以下的不同之處……

代碼:

複製代碼 代碼如下:$connection =& new MySqlConnection($user, $password, $database);

……使你的代碼可擴充和更簡潔……

複製代碼 代碼如下:$connection =& create_connection();

後者的代碼片斷集中在和資料庫連接的create_connect()工廠上 ,就像剛才說的一樣,使創造資料庫連接的過程成為一個簡單的操作—就像new操作一樣。原廠模式的優點就在建立對象上。 它的任務就是把對象的建立過程都封裝起來,然後返回一個所需要的新類。

想改變對象的結構和建立對象的方式嗎? 你只需選擇對象工廠,對代碼的改變只需要一次就夠了。( 原廠模式的功能是如此強大, 它處於是應用的底層, 所以在許多其餘的複雜模式和應用中它會不停地出現。)

樣本代碼

原廠模式封裝了對象的建立過程。 你可以在對象本身建立對象工廠或者是一個額外的工廠類——這要看你具體的應用。讓我們看一個工廠對象的例子。

我們發現下面代碼中,資料庫連接的那部分屢次出現:

複製代碼 代碼如下:// PHP4
class Product {
function getList() { $db =& new MysqlConnection(DB_USER, DB_PW, DB_NAME);
//...
}
function getByName($name) { $db =& new MysqlConnection(DB_USER, DB_PW, DB_NAME);
//...
}
//...
}

為什麼這樣做不好? 資料庫連接的參數出現的地方太多了,當你把這些參數設成常量,意味著你統一定義並對他們進行賦值,顯然這種做法不是很妥當:

你可以輕鬆地改變串連資料庫的參數,但你不能增加或改變這些參數地順序,除非你把所有串連代碼都改了。
你不能輕鬆的執行個體化一個新類去串連另一種資料庫,比如說PostgresqlConnection。
這樣很難單獨測試和證實連線物件的狀態。
使用工廠設計模式,代碼將得到很大的改進:

複製代碼 代碼如下:class Product {
function getList() {
$db =& $this->_getConnection();
//...
}
function &_getConnection() {
return new MysqlConnection(DB_USER, DB_PW, DB_NAME);
}
}

先前的類中存在很多調用new MysqlConnection(DB_USER, DB_PW, DB_NAME)的方法,現在都被集中到的_getConnection()方法上。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.