工廠模式的使用頻率比較高。它的定義爲:定義一個類,該類主要負責系統的去實例化一些其它的類。通俗點說就是,你告訴我你須要哪一個類的實例便可,其它的你不用管,我幫你去實例化,你只管用便可。php
工廠對象可能會動態地建立產品對象的類,或者從對象池中返回一個對象,或者對所建立的對象進行復雜的配置,或者應用其餘的操做。從定義上看,單例模式也是一種工廠模式的實現,由於它爲你實例化了一個特定的對象供系統使用。mysql
數據庫驅動:各個 WEB 框架的數據庫驅動邏輯,其中就有工廠模式的影子。大多數的框架會支持多種數據庫如 oracle / mysql / sql server 等,此時在配置項裏,只需提供一下約定好的數據庫平臺的字符串名稱便可,無需本身實例化數據庫驅動。 WEB 框架收到要實例化的數據庫名稱後,調用工廠模式方法,實例化相應的數據庫驅動後,供後續代碼使用。web
鏈接郵件服務器的類:能夠鏈接郵件服務器的方法有 POP3,IMAP,HTTP ,此時能夠寫一個工廠類負責實例化這幾種鏈接方法,若是某一天對方增長了 webSerives 鏈接方法,那麼直接在工廠類裏作相應的修改便可。sql
class ConnectionFactory { function static getConnection($db_class_name) { $db_class_name = strtolower($db_class_name); if (include_once 'Drivers/' . $db_class_name . '.php') { $classname = 'Driver_' . $db_class_name; return new $db_class_name; } else { throw new Exception ('The specify class driver file didn not found. '); } } } ConnectionFactory::getConnection("mysql"); ConnectionFactory::getConnection("oracle");
若是有了新的數據庫驅動類,只須要在 drivers 下加入相應的驅動文件便可,固然要符合相應驅動規則。數據庫
一個調用者想建立一個對象,只要知道其名稱就能夠了。封裝了實例化過程,使用者不在須要關心過多的實例化過程,只須要提供約定好的實例化標識便可。服務器
擴展性高,若是想增長一個「產品」,只要擴展一個工廠類或者是修改工廠的生產過程便可。 3. 屏蔽產品的具體實現,調用者只關心產品的接口,產品類不論如何變化都再也不影響其實例化過程。oracle
每次增長一個產品時,都須要增長或者修改一個具體類和對象實現工廠,在必定程度上增長了系統的複雜度,同時也增長了系統具體類的依賴。框架