人妻束缚一区二区三区,91亚洲无码手机福利网 ,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日在“特別報(bào)道”專欄中撰文指出:伴隨著上個世紀(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)終究在哪里?之所以用“存活點(diǎn)”這個詞匯來形容,是因?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>