您好,登錄后才能下訂單哦!
小編給大家分享一下php工廠模式和單例模式的區(qū)別有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
php工廠模式和單例模式區(qū)別
單例模式:防止重復(fù)實(shí)例化,避免大量的new操作,減少消耗系統(tǒng)和內(nèi)存的資源,使得有且僅有一個(gè)實(shí)例對(duì)象
header("Content-type: text/html; charset=utf-8"); //定義字符編碼,防止亂碼 /** * 單利類 */ class Single { private static $_instance; //保存實(shí)例的對(duì)象 private function __construct() //定義構(gòu)造方法 { } private function __clone() //定義一個(gè)空方法防止被外部克隆 { } public static function getInstance() //定義一個(gè)獲取實(shí)例對(duì)象的方法 { if (!(self::$_instance instanceof Single)) { self::$_instance = new self(); } return self::$_instance; //返回實(shí)例對(duì)象 } /** * 測(cè)試方法 */ public function test() { echo "單利模式"; } } $run=Single::getInstance(); $run->test();
工廠模式:用工廠方法代替new操作的一種模式,如果需要更改所實(shí)例化的類名,只需在工廠方法內(nèi)修改,不需逐一尋找代碼中具體實(shí)例化的地方
header("content-type:text/html;charset=utf-8"); //定義字符編碼,防止亂碼 /** * 測(cè)試類一 */ class demo1 { //定義一個(gè)test1方法 public function test1() { echo '這是demo1類的test1方法'.PHP_EOL; } } /** * 測(cè)試類二 */ class demo2 { //定義一個(gè)test2方法 public function test2() { echo '這是demo2類的test2方法'.PHP_EOL; } } /** * 工廠類 */ class Factoty { // 根據(jù)傳參類名,創(chuàng)建對(duì)應(yīng)的對(duì)象 static function createObject($className) { return new $className(); } } /** * 通過(guò)傳類名,調(diào)用工廠類里面的創(chuàng)建對(duì)象方法 */ $demo = Factoty::createObject('demo1'); $demo->test1(); //輸出這是demo1類的test1方法 $demo = Factoty::createObject('demo2'); $demo->test2(); //輸出這是demo2類的test2方法
以上是php工廠模式和單例模式的區(qū)別有哪些的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。