国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 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(); 

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新巴尔虎左旗| 永城市| 黔江区| 重庆市| 佳木斯市| 建昌县| 三都| 隆德县| 连山| 宁化县| 稻城县| 大竹县| 湄潭县| 志丹县| 兴海县| 海口市| 汪清县| 年辖:市辖区| 竹北市| 通渭县| 上虞市| 孝感市| 天水市| 鹤山市| 专栏| 英德市| 独山县| 德保县| 和静县| 平定县| 图们市| 湘潭县| 龙海市| 五寨县| 内江市| 应用必备| 镇赉县| 美姑县| 安龙县| 化州市| 公安县|