多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > PHP設(shè)計(jì)模式之工廠模式學(xué)習(xí)筆記

PHP設(shè)計(jì)模式之工廠模式學(xué)習(xí)筆記

來源:程序員人生   發(fā)布時(shí)間:2014-06-17 01:55:40 閱讀次數(shù):2659次

本文章來給大家介紹php5中的一個(gè)新東西,就是工廠模式了,這里是我常用工廠模式的一些學(xué)習(xí)筆記,下面與大家一同分享有需要了解的朋友可參考.

在大型系統(tǒng)中,許多代碼依賴于少數(shù)幾個(gè)關(guān)鍵類.需要更改這些類時(shí),可能會(huì)出現(xiàn)困難.例如,假設(shè)您有一個(gè)從文件讀取的 User 類.您希望將其更改為從數(shù)據(jù)庫讀取的其他類,但是,所有的代碼都引用從文件讀取的原始類.這時(shí)候,使用工廠模式會(huì)很方便.工廠模式是一種類,它具有為您創(chuàng)建對象的某些方法.您可以使用工廠類創(chuàng)建對象,而不直接使用 new.這樣,如果您想要更改所創(chuàng)建的對象類型,只需更改該工廠即可.使用該工廠的所有代碼會(huì)自動(dòng)更改.

示例1:顯示工廠類的一個(gè)示列.

等式的服務(wù)器端包括兩個(gè)部分:數(shù)據(jù)庫和一組 PHP 頁面,這些頁面允許您添加反饋、請求反饋列表并獲取與特定反饋相關(guān)的文章

實(shí)例代碼如下:

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

IUser接口定義用戶對象應(yīng)執(zhí)行什么操作.IUser 的實(shí)現(xiàn)稱為 User,UserFactory 工廠類則創(chuàng)建 IUser 對象.此關(guān)系可以用圖1中的UML表示.

圖 1. 工廠類及其相關(guān) IUser 接口和用戶類如果您使用 php 解釋器在命令行上運(yùn)行此代碼,將得到如下結(jié)果:

% php factory1.php
Jack
%
 

測試代碼會(huì)向工廠請求 User 對象,并輸出 getName 方法的結(jié)果.有一種工廠模式的變體使用工廠方法.類中的這些公共靜態(tài)方法構(gòu)造該類型的對象.如果創(chuàng)建此類型的對象非常重要,此方法非常有用.例如,假設(shè)您需要先創(chuàng)建對 象,然后設(shè)置許多屬性.此版本的工廠模式會(huì)將該進(jìn)程封裝在單個(gè)位置中,這樣,不用復(fù)制復(fù)雜的初始化代碼,也不必將復(fù)制好的代碼在在代碼庫中到處粘貼.

示例2 顯示使用工廠方法的一個(gè)示例.

實(shí)例代碼如下:

  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. ?> 

好了上面講了很多了, 下面我來來看個(gè)實(shí)例

我們建立以下四個(gè)文件

index.php實(shí)例代碼如下:

  1. <?php 
  2. include_once("f.inc.php"); 
  3. $f=new factory; 
  4. $t1=&$f->create('T1'); 
  5. echo $t1->getName(); 
  6. echo $config
  7. ?> 

f.inc.php實(shí)例代碼如下:

  1. <?php 
  2. class factory 
  3.  function factory() 
  4.  { 
  5.   $this->mClasses=array 
  6.  
  7. ('T1'=>'t1.inc.php','T2'=>'t2.inc.php'); 
  8.  } 
  9.  function &create($class
  10.  { 
  11.   if (!class_exists($class)) 
  12.   { 
  13.    require_once($this->mClasses[$class]); 
  14.   } 
  15.   return new $class
  16.  } 
  17. ?> 

t1.inc.php實(shí)例代碼如下:

  1. <?php 
  2. global $config
  3. $config='surfchen'
  4. class T1 
  5.  var $mName='name::T1'
  6.  function getName() 
  7.  { 
  8.   return $this->mName; 
  9.  } 
  10. ?> 

t2.inc.php實(shí)例代碼如下:

  1. <?php 
  2. class T2 
  3.  function T2() 
  4.  { 
  5.   echo 't2 is ok'
  6.  } 
  7. ?> 

在index.php里,我們通過一個(gè)factory類來創(chuàng)建其他的類實(shí)例.在factory里,保存有一個(gè)數(shù)組$this->mClasses,格式為array(“類名”=>”類文件路徑”).我們通過factory::create()來創(chuàng)建一個(gè)類實(shí)例的時(shí)候,在create()里,會(huì)首先檢測類是否存在,如果不存在,就根據(jù)$this->mClasses把類對應(yīng)的類文件包含進(jìn)來.然后創(chuàng)建并返回一個(gè)該類的實(shí)例.這樣,我們只需要把factory類文件包含進(jìn)執(zhí)行的腳本(如index.php)中就可以了.大家可能還注意到了在t1.inc.php中的這兩行代碼.

實(shí)例代碼如下:

  1. global $config
  2. $config='surfchen'

為什么需要global呢?因?yàn)閠1.inc.php是在factory::create中被包含的,t1文件中的變量將會(huì)默認(rèn)為create的函數(shù)級(jí)變量.所以我們需要對其中的變量(如$config)進(jìn)行g(shù)lobal以便index.php能訪問到.運(yùn)行index.php,將會(huì)輸出

實(shí)例代碼如下:

  1. name::T1surfchen 
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 欧美日一区 | 视频h在线 | 免费观看成人www精品视频在线 | 亚洲综合福利 | 国产高清在线看免费视频观 | 久久精品亚洲 | 国产成人精品视频一区 | 一级毛片视频在线观看 | 久久久久久一级毛片免费无遮挡 | 伊人网视频在线 | 国产精品福利社 | 久久综合九色综合欧洲色 | 九色欧美| 免费观看成人欧美1314www | 2020在线不卡观看视频 | 国产成人久久久精品毛片 | 成人国内精品久久久久影院 | 一级中文字幕 | 久久久久久久国产a∨ | 欧美综合国产精品日韩一 | 一级做a爱片就在线看 | 午夜三级在线 | 伊人免费观看 | 国产69精品久久久久99 | 一区二区视频在线观看免费的 | 中文精品久久久久中文 | 亚洲日韩男人网在线 | 黄网址免费 | 国产人成精品免费视频 | 精品哟哟哟国产在线观看不卡 | 中文字幕乱码一区三区免费 | 毛片破处 | 亚洲欧美视频在线观看 | 国产成人亚洲精品影院 | 久久国产欧美日韩高清专区 | 性欧美与印度人xxx 性欧美孕妇xxxx | 一区二区三区四区视频在线观看 | japanese日本护士18 | 中文字幕中文字幕中中文 | 国产69精品久久久久9999 | 久久国产综合精品欧美 |