亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php中設計模式工廠模式和單例模式實例

2024-05-04 21:47:33
字體:
來源:轉載
供稿:網友

1.工廠模式

工廠模式是一種類,它具有為您創建對象的某些方法,您可以使用工廠類創建對象,而不直接使用 new,這樣,如果您想要更改所創建的對象類型,只需更改該工廠即可,使用該工廠的所有代碼會自動更改。

主要作用是降低耦合度,代碼如下:

  1. abstract class Operation{ 
  2.     abstract public  function getValue($num1,$num2); 
  3.     public  function getAttr(){ 
  4.         return 1; 
  5.     } 
  6. class Add extends Operation{ 
  7.     public function getValue($num1$num2){         
  8.         return $num1+$num2
  9.     } 
  10. class Sub extends Operation{ 
  11.     public function getValue($num1$num2){ 
  12.         return $num1-$num2
  13.     } 
  14. class Factory{ 
  15.     public static function CreateObj($operation){ 
  16.          
  17.         switch ($operation){ 
  18.             case '+'return new Add(); 
  19.             case '-'return new Sub(); 
  20.         } 
  21.          
  22.     } 
  23. $Op=Factory::CreateObj('-'); 
  24. echo $Op->getValue(3, 6); 

用在真正開發中一般當做數據庫選擇類。

實例2 顯示使用工廠方法的一個示例,代碼如下:

  1. <?php 
  2. interface IUser 
  3.   function getName(); 
  4. class User implements IUser 
  5.   public static function Load( $id )  
  6.   { 
  7.         return new User( $id ); 
  8.   } 
  9.   public static function Create( )  
  10.   { 
  11.         return new User( null ); 
  12.   } 
  13.   public function __construct( $id ) { } 
  14.   public function getName() 
  15.   { 
  16.     return "Jack"
  17.   } 
  18. $uo = User::Load( 1 ); 
  19. echo$uo->getName()."n" ); 
  20. ?> 

這段代碼要簡單得多,它僅有一個接口 IUser 和一個實現此接口的 User 類,User 類有兩個創建對象的靜態方法.PHP里通過工廠模式提高效率

我們建立以下四個文件,代碼如下:

  1. //index.php 
  2. <?php 
  3. include_once("f.inc.php"); 
  4. $f=new factory; 
  5. $t1=&$f->create('T1'); 
  6. echo $t1->getName(); 
  7. echo $config; 
  8. ?> 
  9. //f.inc.php 
  10. <?php 
  11. class factory 
  12.  function factory() 
  13.  { 
  14.   $this->mClasses=array('T1'=>'t1.inc.php','T2'=>'t2.inc.php'); 
  15.  } 
  16.  function &create($class
  17.  { 
  18.   if (!class_exists($class)) 
  19.   { 
  20.    require_once($this->mClasses[$class]); 
  21.   } 
  22.   return new $class
  23.  } 
  24. ?> 
  25. //t1.inc.php 
  26. <?php 
  27. global $config; 
  28. $config='surfchen'
  29. class T1 
  30.  var $mName='name::T1'
  31.  function getName() 
  32.  { 
  33.   return $this->mName; 
  34.  } 
  35. ?> 
  36. //t2.inc.php 
  37. <?php 
  38. class T2 
  39.  function T2() 
  40.  { 
  41.   echo 't2 is ok'
  42.  } 
  43. ?> 

在index.php里,我們通過一個factory類來創建其他的類實例。

在factory里,保存有一個數組$this->mClasses,格式為array(“類名”=>”類文件路徑”).

我們通過factory::create()來創建一個類實例的時候,在create()里,會首先檢測類是否存在,如果不存在,就根據$this->mClasses把類對應的類文件包含進來。然后創建并返回一個該類的實例。

這樣,我們只需要把factory類文件包含進執行的腳本(如index.php)中就可以了,大家可能還注意到了在t1.inc.php中的這兩行代碼,代碼如下:global $config;$config='surfchen';

2.單例模式

簡單來說,PHP單例模式就是一個功能用一個類來實現,并且在整個應用程序當中只有一個這個類的實例存在;

工廠模式強調的是面向對象的多態性,它可以把功能上的差異部分封裝起來,對外實現共有的功能,比如說數據庫的鏈接,由于數據庫的不同,我們可能需要寫不同的方法去實現數據庫的鏈接,但作為應用程序來講,它不需要了解數據庫用的是MySQL還是Oracle,它只需要用query()這個方法去執行數據庫的相應操作即可,這樣就屏蔽了差異,使類更加健壯!代碼如下:

  1. class Mysql{ 
  2.     public static $conn
  3.     public static function getInstance(){ 
  4.         if (!self::$conn){ 
  5.             new self(); 
  6.             return self::$conn
  7.         }else { 
  8.             return self::$conn
  9.         } 
  10.          
  11.     } 
  12.     private  function __construct(){     
  13.         self::$conn=  "mysql_connect:";//    mysql_connect('','','')     
  14.     } 
  15.      
  16.     public function __clone() 
  17.     { 
  18.         trigger_error("Only one connection"); 
  19.     } 
  20. echo Mysql::getInstance(); 
  21. echo Mysql::getInstance(); 

實際中用作數據庫連接類和工廠模式一起使用,根據參數調用單例模式,可以提高資源使用效率.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品久久久一区| 日韩精品视频三区| 亚洲国产高清福利视频| 欧美午夜激情视频| 日本一区二区三区四区视频| 国产欧美精品一区二区三区-老狼| 日韩有码在线电影| www.日韩.com| 波霸ol色综合久久| 狠狠躁夜夜躁人人爽天天天天97| 亚洲全黄一级网站| 成人激情电影一区二区| 久久久免费高清电视剧观看| 视频在线观看一区二区| 亚洲欧美自拍一区| 韩国福利视频一区| 欧美黑人极品猛少妇色xxxxx| 亚洲精品美女在线观看播放| 久久久国产成人精品| 欧美日韩成人黄色| 97精品视频在线观看| 国产精品一区二区三区免费视频| 91在线播放国产| 在线观看欧美日韩国产| 欧美日韩午夜激情| 欧美黑人xxxx| 欧美在线免费视频| 欧美日韩亚洲精品内裤| 久久国产一区二区三区| 国产精品午夜国产小视频| 国产精品综合网站| 91在线视频导航| 国产精品免费一区| 国产亚洲美女精品久久久| 高跟丝袜欧美一区| 国产精品久久久久9999| 97视频在线观看免费高清完整版在线观看| 精品无人区乱码1区2区3区在线| 国产精品美女网站| 日韩经典第一页| 国产欧美日韩91| 欧美伊久线香蕉线新在线| 97碰碰碰免费色视频| 国产精品露脸自拍| 中文字幕亚洲综合久久筱田步美| 国产精品一区二区久久精品| 国产视频综合在线| 97精品伊人久久久大香线蕉| 欧美性69xxxx肥| 欧美wwwxxxx| 91免费看片网站| 91免费版网站入口| 在线播放国产一区中文字幕剧情欧美| 青草热久免费精品视频| 美女av一区二区| 欧美成人午夜激情视频| 亚洲精品小视频在线观看| 亚洲精品国精品久久99热| 国产小视频国产精品| 色偷偷av一区二区三区| 中文字幕亚洲欧美一区二区三区| 亚洲美女av在线| 一区二区成人精品| 久久久久久网站| 国产精品久久久久国产a级| 国产精品久久色| 精品高清一区二区三区| 欧美激情视频一区二区三区不卡| 黑人巨大精品欧美一区二区一视频| 亚洲精品国产suv| 日本午夜人人精品| 欧美国产日韩一区| 一本色道久久综合狠狠躁篇的优点| 国产午夜精品一区二区三区| 亚洲国产精品99久久| 国产成人aa精品一区在线播放| 成人www视频在线观看| 久久精品中文字幕免费mv| 国产一区二区三区精品久久久| 激情亚洲一区二区三区四区| 久久久久久亚洲精品中文字幕| 欧美国产一区二区三区| 日韩大陆毛片av| 欧美成人精品在线播放| 欧美高清在线视频观看不卡| 亚洲aⅴ男人的天堂在线观看| 亚洲国产第一页| 精品无码久久久久久国产| 成人信息集中地欧美| 精品免费在线观看| 久久久久久国产精品| 欧美性xxxxxx| 欧美日韩在线影院| 91高清免费在线观看| 97香蕉久久夜色精品国产| 久久亚洲精品一区二区| 亚洲丝袜av一区| 国产精品综合网站| 日韩电影在线观看永久视频免费网站| 日本精品va在线观看| 日韩av在线免费播放| 欧美成人小视频| 91精品久久久久久久久久| 中文字幕日韩专区| 日本乱人伦a精品| 欧美一级大胆视频| 欧美在线中文字幕| 亚洲第一av在线| 国产综合久久久久| 欧美韩国理论所午夜片917电影| 懂色av影视一区二区三区| 国内精品久久久久久久| 国产精品自产拍在线观| 国产精品久久久久影院日本| 亚洲午夜未删减在线观看| 国语自产偷拍精品视频偷| 午夜精品久久久久久99热软件| 91精品国产91久久久久久吃药| 亚洲一区二区三区四区视频| 国产欧美久久久久久| 国产精品美女久久久免费| 久久久久久av| 国语自产精品视频在线看| 亚洲天堂av图片| 欧美一级片久久久久久久| 亚洲欧美一区二区三区在线| 国产精品久久久久久超碰| 日本一本a高清免费不卡| 亚洲aa在线观看| 国产精品av在线| 少妇激情综合网| 日韩免费不卡av| 欧美激情视频免费观看| 欧美成人免费一级人片100| 欧洲日本亚洲国产区| 亚洲黄色在线观看| 亚洲一区久久久| 久久精品国产久精国产思思| 日韩精品免费观看| www高清在线视频日韩欧美| 91社区国产高清| 两个人的视频www国产精品| 久久久久国产精品免费| 色哟哟网站入口亚洲精品| 亚洲香蕉伊综合在人在线视看| 欧美理论片在线观看| 国产精品久久久久久久久久免费| 成人免费看吃奶视频网站| 国产精品美女久久久久av超清| 国产免费亚洲高清| 精品视频9999| 欧美另类极品videosbest最新版本| 成人精品一区二区三区电影免费| 九九久久久久久久久激情| 91中文字幕在线观看| 成人情趣片在线观看免费| 欧美成年人视频网站欧美| 2019精品视频| 97久久久免费福利网址| 国产日韩欧美成人| 欧美高清电影在线看| 日韩乱码在线视频| 亚洲在线第一页| 精品成人国产在线观看男人呻吟|