首頁  >  文章  >  後端開發  >  php中的設計模式:工廠模式

php中的設計模式:工廠模式

WBOY
WBOY原創
2016-08-08 09:33:14855瀏覽

工廠類別就是一個專門用來創建其它物件的類別,工廠類別在多態性程式設計實踐中是非常重要的。它允許動態替換類,修改配置,會使應用程式更加靈活。掌握工廠模式對Web開發是不可或缺的。

工廠模式通常用來傳回類似介面的不同的類,工廠的常見用法就是創建多態的提供者。

通常工廠模式有一個關鍵的構造,即一般被命名為factory的靜態方法。這個靜態方法可以接受任意數量的參數,並且必須傳回一個物件。

   工廠模式在多態性設計中非常重要,如果應用得當,可以使得應用程式的移植性更好,類別之間的依賴更鬆散,從而提高靈活性。如果說單例模式被為類別的職責的話,那麼工廠模式就是類別的多態性。

   那麼什麼是工廠類別呢?

   概念:工廠類別是指包含了一個專門用來創建其它物件的方法的類別。

  應用場景:工廠模式通常用來傳回符合類似介面的不同的類別。也就是說,工廠類別可以允許我們根據配置或應用程式的邏輯來決定要實例化哪一個類別。

   下面是一個簡單的工廠類別代碼:

     

<spanmicrosoft yahei><span>interface</span><span> IDatabase {
  //...</span><span>public</span> <span>function</span> query(<span>$sql</span><span>);</span><span> } </span><span>class</span><span> DBFactory { </span><span>public</span> <span>static</span> <span>function</span> create(<span>$type</span><span>){ </span><span>$db</span> = <span>null</span><span>; </span><span>switch</span> (<span>$type</span><span>) { </span><span>case</span> 'mysql': <span>$db</span> = <span>new</span> <span>Mysql</span>(<span>/*</span><span>*arguments</span><span>*/</span><span>); </span><span>break</span><span>; </span><span>case</span> 'sqlite': <span>$db</span> = <span>new</span> Sqlite(<span>/*</span><span>*arguments</span><span>*/</span><span>); </span><span>break</span><span>; </span><span>case</span> 'pgsql': <span>$db</span> = <span>new</span> PGsql(<span>/*</span><span>*arguments</span><span>*/</span><span>); </span><span>break</span><span>; </span><span>default</span>: <span>#</span><span> code...</span> <span>break</span><span>;
        } </span><span>return</span> <span>$db</span><span>;
    }

} </span><span>class</span> <span>Mysql</span> <span>implements</span><span> IDatabase {
   </span><span>//... </span><span>public</span> <span>function</span> query(<span>$sql</span><span>){

    }</span><span> } </span><span>/*</span><span>*other class ...</span><span>*/</span></spanmicrosoft>

使用工廠類別:

<spanmicrosoft yahei><span>$db</span> = DBFactory::create('mysql'<span>); </span><span>$db</span>->query('show database');</spanmicrosoft>

我們這裡的每一個資料庫都繼承了指定的接口,這樣做的目的是為了使所有的資料庫物件對外都有一致的表現。外部類別可以放心的使用介面中申明的方法,也就是我們軟體工程中常說的對使用者透明。假如某一天,因為機房變更,我們要換成另外一種資料庫,我們只要按照介面實現相關的資料庫類,業務代碼都不需要改動。這體現了工廠類的靈活性和多態性。

從另一個角度來說,我們把變化都集中在入口處。內部不需要針對這些變化進行if-else的重複處理。

好了,理論的內容就只有這麼多,更多的體會需要在專案中多運用,多體會它的好處。

以上就介紹了php中的設計模式:工廠模式,包括了php工廠模式的內容,希望對PHP教程有興趣的朋友有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn