<tfoot id="uuuu0"><noscript id="uuuu0"></noscript></tfoot>
  • <tfoot id="uuuu0"></tfoot>
  • <nav id="uuuu0"></nav>
  • <tfoot id="uuuu0"><noscript id="uuuu0"></noscript></tfoot>
    • 精品丝袜人妻久久久久久,人妻系列在线无码,日韩av东京社区男人的天堂,伊人久久大香线蕉在观看,成年女人喷潮毛片免费播,99在线精品视频免费

      新聞資訊

      洞悉互聯(lián)網(wǎng)前沿資訊,探尋網(wǎng)站優(yōu)化規(guī)律。

      淺談PHP設(shè)計(jì)模式之代理模式

      發(fā)表日期:2016-11-22 13:21:28   文章編輯:紅海小編   瀏覽次數(shù):0

      規(guī)劃辦法( Design Pattern)是從建筑規(guī)劃范疇引進(jìn)到計(jì)算機(jī)科學(xué)的。規(guī)劃辦法是對軟件規(guī)劃中普遍存在(且重復(fù)呈現(xiàn))的各種疑問,所提出的處理計(jì)劃。規(guī)劃辦法并不直接用來完結(jié)程序碼的編寫,而是描述在各種不一樣情況下,要怎樣處理疑問的一種計(jì)劃。

      更多對于PHP規(guī)劃辦法方面的入門與運(yùn)用能夠參閱本溪紅海傳媒廣告之前的報(bào)導(dǎo)《運(yùn)用規(guī)劃辦法改進(jìn)程序結(jié)構(gòu)》以及《架構(gòu)、結(jié)構(gòu)、規(guī)劃辦法之間的聯(lián)絡(luò)簡述》。

      咱們常常看到對于Java和.NET平臺上規(guī)劃辦法的論說和解說,其實(shí),在PHP 5對面向方針的支撐愈加完善之后,規(guī)劃辦法的運(yùn)用也可引進(jìn)到PHP中并表現(xiàn)重要作用。本溪紅海傳媒廣告將從本周起以每周一期的辦法連載《PHP規(guī)劃辦法閑談》的系列文章,以理論與代碼實(shí)例相結(jié)合的辦法解說PHP中的規(guī)劃辦法。期望對從事PHP研制的讀者有所幫助。

      今日咱們要談的是PHP規(guī)劃辦法中的署理辦法(Proxy),它是對簡單處理程序(或指針)的增強(qiáng),用于引證一個方針:這個指針被署理(Proxy)方針取代,署理方針坐落客戶端(Client)和實(shí)在履行程序之間,指針有一個可被多個方針運(yùn)用的鉤子。

      從技能上講,這種辦法在客戶端和實(shí)在主體(RealSubject)之間刺進(jìn)一個署理方針,保護(hù)subject接口和用不一樣的辦法派遣它的辦法。署理能夠透明地做任何事情:懶散創(chuàng)立RealSubject或載入數(shù)據(jù),與其它機(jī)器交流音訊,寫時仿制策略等。這與HTTP署理有點(diǎn)相似,其客戶端(如瀏覽器)和運(yùn)用程序依賴于與HTTP服務(wù)器的聯(lián)絡(luò),署理在管理銜接時能夠完結(jié)其它使命,如拜訪操控和緩存大型下載文件。

      PHP規(guī)劃辦法中的署理辦法
      PHP規(guī)劃辦法中的署理辦法示例

      署理辦法的方針圖與裝修辦法方針圖在結(jié)構(gòu)上相似,但表達(dá)的意圖各有不一樣,裝修者給方針動態(tài)添加做法,而署理則操控來自客戶端的拜訪。此外,署理只在需求時才創(chuàng)立RealSubject。 

      參與者

      客戶端(Client):取決于主體(Subject)完結(jié);

      主體(Subject):RealSubject的籠統(tǒng);

      實(shí)在主體(RealSubject):完結(jié)價(jià)值昂揚(yáng)的作業(yè)或包括很多的數(shù)據(jù);

      署理(Proxy):為Client供給一個與Subject一致的引證,僅在需求時才創(chuàng)立RealSubject實(shí)例或與RealSubject實(shí)例通訊。

      下面是兩個被廣泛運(yùn)用的署理辦法比如:

      1、方針-聯(lián)絡(luò)映射(Orms)在運(yùn)行中創(chuàng)立署理作為實(shí)體類的子類,以完結(jié)懶散加載(虛擬署理),這個署理會掩蓋一切實(shí)體辦法,在前面追加一個載入程序,在辦法被實(shí)在調(diào)用前不會包括任何數(shù)據(jù),Orms署理支撐方針間的雙向聯(lián)絡(luò),不必加載全部數(shù)據(jù)庫,由于它們被置于當(dāng)時加載方針圖的鴻溝。

      2、Java RMI運(yùn)用長途署理方針(長途署理),當(dāng)它們的辦法被調(diào)用時,署理序列化參數(shù),履行網(wǎng)絡(luò)上的懇求,托付調(diào)用另一個節(jié)點(diǎn)上的實(shí)在方針,這種技能答應(yīng)透明地調(diào)用長途方針,不必憂慮它們是不是在同一臺機(jī)器上,但這種透明度很簡單會使履行速度變慢。

      下面的代碼示例完結(jié)了一個ImageProxy,推遲了圖畫數(shù)據(jù)的加載。

      1.  
      2. /**
      3.  * Subject interface.  
      4.  * Client depends only on this abstraction.  
      5.  */ 
      6. interface Image  
      7. {  
      8.     public function getWidth();  
      9.  
      10.     public function getHeight();  
      11.  
      12.     public function getPath();  
      13.  
      14.     /**
      15.      * @return string   the image's byte stream  
      16.      */ 
      17.     public function dump();  
      18. }  
      19.  
      20. /**
      21.  * Abstract class to avoid repetition of boilerplate code in the Proxy  
      22.  * and in the Subject. Only the methods which can be provided without  
      23.  * instancing the RealSubject are present here.  
      24.  */ 
      25. abstract class AbstractImage implements Image  
      26. {  
      27.     protected $_width;  
      28.     protected $_height;  
      29.     protected $_path;  
      30.     protected $_data;  
      31.  
      32.     public function getWidth()  
      33.     {  
      34.         return $this->_width;  
      35.     }  
      36.  
      37.     public function getHeight()  
      38.     {  
      39.         return $this->_height;  
      40.     }  
      41.  
      42.     public function getPath()  
      43.     {  
      44.         return $this->_path;  
      45.     }  
      46. }  
      47.  
      48. /**
      49.  * The RealSubject. Always loads the image, even if no dump of the data  
      50.  * is required.  
      51.  */ 
      52. class RawImage extends AbstractImage  
      53. {  
      54.     public function __construct($path)  
      55.     {  
      56.         $this->_path = $path;  
      57.         list ($this->_width, $this->_height) = getimagesize($path);  
      58.         $this->_data = file_get_contents($path);  
      59.     }  
      60.  
      61.     public function dump()  
      62.     {  
      63.         return $this->_data;  
      64.     }  
      65. }  
      66.  
      67. /**
      68.  * Proxy. Defers loading the image data until it becomes really mandatory.  
      69.  * This class does its best to postpone the very expensive operations  
      70.  * such as the actual loading of the BLOB.  
      71.  */ 
      72. class ImageProxy extends AbstractImage  
      73. {  
      74.     public function __construct($path)  
      75.     {  
      76.         $this->_path = $path;  
      77.         list ($this->_width, $this->_height) = getimagesize($path);  
      78.     }  
      79.  
      80.     /**
      81.      * Creates a RawImage and exploits its functionalities.  
      82.      */ 
      83.     protected function _lazyLoad()  
      84.     {  
      85.         if ($this->_realImage === null) {  
      86.             $this->_realImage = new RawImage($this->_path);  
      87.         }  
      88.     }  
      89.  
      90.     public function dump()  
      91.     {  
      92.         $this->_lazyLoad();  
      93.         return $this->_realImage->dump();  
      94.     }  
      95. }  
      96.  
      97. /**
      98.  * Client class that does not use the data dump of the image.  
      99.  * Passing blindly a Proxy to this class and to other Clients makes sense  
      100.  * as the data would be loaded anyway when Image::dump() is called.  
      101.  */ 
      102. class Client  
      103. {  
      104.     public function tag(Image $img)  
      105.     {  
      106.         return ';  
      107.     }  
      108. }  
      109.  
      110. $path = '/home/giorgio/shared/Immagini/kiki.png';  
      111. $client = new Client();  
      112.  
      113. $image = new RawImage($path); // loading of the BLOB takes place  
      114. echo $client->tag($image), "/n";  
      115.  
      116. $proxy = new ImageProxy($path);  
      117. echo $client->tag($proxy), "/n"// loading does not take place even here 

      以上代碼完結(jié)了PHP的署理辦法。簡單來講,署理辦法即是為別的方針供給一個署理以操控對這個方針的拜訪。

      對于規(guī)劃辦法的別的方面

      咱們知道了啥是規(guī)劃辦法以及PHP規(guī)劃辦法中的署理辦法。這兒還有一些對于規(guī)劃辦法的基本概念應(yīng)該被熟知。

      ◆算法不能算是一種規(guī)劃辦法,由于算法主要是用來處理計(jì)算上的疑問,而非規(guī)劃上的疑問。

      ◆面向方針規(guī)劃辦法通常以種類或物件來描述其中的聯(lián)絡(luò)和相互作用,但不涉及用來完結(jié)運(yùn)用程序的特定種類或物件。

      ◆規(guī)劃辦法主要是使不安穩(wěn)的依賴于相對安穩(wěn)、詳細(xì)依賴于相對籠統(tǒng),防止會引起麻煩的緊耦合,以增強(qiáng)軟件規(guī)劃面臨并適應(yīng)改變的才能。

      ◆并非一切的軟件辦法都是規(guī)劃辦法,規(guī)劃辦法特指軟件規(guī)劃層次上的疑問。還有其它非規(guī)劃辦法的辦法,如架構(gòu)辦法。 

      咱們會在下周繼續(xù)為您連載《PHP規(guī)劃辦法閑談》,敬請期待。

      一鍵分享到:
      返回列表

      News

      行業(yè)資訊

      提供網(wǎng)站建設(shè)相關(guān)資訊、互聯(lián)網(wǎng)行業(yè)資訊、網(wǎng)站設(shè)計(jì)知識、空間域名郵箱、網(wǎng)站解決方案、常見問題、簽約新聞等

      做網(wǎng)站要有創(chuàng)新意識

      2016-11-18 23:32:44

      做網(wǎng)站要有創(chuàng)新意識

      立異于軟件業(yè),就比方錢于社會人,立異不是全能的,沒有立異卻是萬萬不能的。可是立異也象錢相同,不是說有就有,乃至不能說跟自個努力有決議聯(lián)系。所以許多時分,媒體...

      網(wǎng)站開發(fā)市場正面臨著一場大“減肥”的運(yùn)動

      2016-11-18 23:33:21

      網(wǎng)站開發(fā)市場正面臨著一場大“減...

      導(dǎo)讀:本溪紅海傳媒網(wǎng)站12月4日在&ldquo;特別報(bào)道&rdquo;專欄中撰文指出:伴隨著上個世紀(jì)90年代經(jīng)濟(jì)的高速增加,很多的商用軟件層出不窮,而現(xiàn)在如此紛繁復(fù)雜的商...

      網(wǎng)站建設(shè)公司所面臨的困境

      2016-11-18 23:36:31

      網(wǎng)站建設(shè)公司所面臨的困境...

      教學(xué)構(gòu)造單一   人才才能弱化   如今,我國軟件人才的培育首要依托規(guī)范院校的學(xué)歷教學(xué),集中在本科期間。據(jù)統(tǒng)計(jì),我國當(dāng)時軟件從業(yè)人員約有40萬...

      網(wǎng)站建設(shè)公司的明天

      2016-11-18 23:37:58

      網(wǎng)站建設(shè)公司的明天

      在前不久的殺毒廠商降價(jià)熱潮后,有人提出這個疑問?國內(nèi)通用軟件廠商在將來的存活點(diǎn)終究在哪里?之所以用&ldquo;存活點(diǎn)&rdquo;這個詞匯來形容,是因?yàn)楦鴮τ趥€人...

      2017年網(wǎng)站建設(shè)人才需求增加

      2016-11-18 23:39:36

      2017年網(wǎng)站建設(shè)人才需求增加...

      《復(fù)興軟件工業(yè)舉動大綱》日前正式發(fā)動。2002年9月18日,國務(wù)院辦公廳轉(zhuǎn)發(fā)了《復(fù)興軟件工業(yè)舉動大綱(2002年至2005年)》(國辦發(fā)〔2002〕47號)(以下簡稱《舉動大綱...

      精品丝袜人妻久久久久久
      <tfoot id="uuuu0"><noscript id="uuuu0"></noscript></tfoot>
    • <tfoot id="uuuu0"></tfoot>
    • <nav id="uuuu0"></nav>
    • <tfoot id="uuuu0"><noscript id="uuuu0"></noscript></tfoot>