工廠模式:說白了就是使用統一方法(工廠方法)來實例化對象,咱們定義一個專門用來建立其它對象的類。 這樣在須要調用某個類的時候,咱們就不須要去使用new關鍵字實例化這個類,而是經過咱們的工廠類調用某個方法獲得類的實例。php
工廠模式一般用來返回符合相似接口的不一樣的類,工廠的一種常見用法就是建立多態的提供者,從而容許咱們基於應用程序邏輯或者配置設置來決定應實例化哪個類,例如,可使用這樣的提供者來擴展一個類,而不須要重構應用程序的其餘部分,從而使用新的擴展後的名稱 。數據庫
一般,工廠模式有一個關鍵的構造,根據通常原則命名爲Factory的靜態方法,然而這只是一種原則,工廠方法能夠任意命名,這個靜態還能夠接受任意數據的參數,必須返回一個對象。spa
當咱們對象所對應的類的類名發生變化的時候,咱們只須要改一下工廠類類裏面的實例化方法便可。不須要外部改全部的地方,若是是更改參數,那麼又得另一種說法了。code
下面咱們看代碼:對象
index.php //單一入口 <?php $a=Database::getInstance(); //直接調用數據庫靜態化方法 $db=Factory::createDatabase(); //使用工廠模式,來實例化數據庫 Database.php //數據庫類 <?php class Database { static protected $db; private function __construct() { } static function getInstance() { if(self::$db){ return slef::$db; }else{ self::$db=new self(); return self::$db; } } } Factory.php /工廠模式類 <?php namespace IMooc; class Factory { static function createDatabase() { $db=Database::getinstance(); return $db; } }
你懂了?工廠模式,其實就是把類的實例化給隱藏了,讓系統自動去執行實例化,你所要作的,就是經過工廠模式,來獲得對應的對象。接口