PHP設計模式(7)代理模式
PHP設計模式中的代理模式(Proxy),它是對簡單處理程式(或指標)的增強,用於引用一個物件:這個指標被代理(Proxy)物件取代,代理物件位於客戶端(Client)和真實執行程式之間,指標有一個可被多個目標利用的鉤子。
從技術上講,這種模式在客戶端和真實主體(RealSubject)之間插入一個代理物件,維護subject介面和用不同的方式委派它的方法。
參與者:
◆客戶端(Client):取決於主體(Subject)實現;
◆主體(Subject):RealSubject的抽象;
◆真實主體(RealSubject):完成代價高昂的工作或包含大量的資料;
◆代理(Proxy):為Client提供一個與Subject一致的引用,僅在需要時才建立RealSubject例項或與RealSubject例項通訊。
廣泛使用的代理模式例子:
1、物件-關係對映(Orms)在執行中建立代理作為實體類的子類,以實現懶散載入(虛擬代理),這個代理會覆蓋所有實體方法,在前面追加一個載入程式,在方法被真正呼叫前不會包含任何資料,Orms代理支援物件間的雙向關係,不用載入整個資料庫,因為它們被置於當前載入物件圖的邊界。
感覺好難理解吧,我也不是很理解,看程式碼吧~~~回頭慢慢理解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
<?php //定義介面 interface Image {
public function getWidth();
public function getHeight();
public function getPath();
//返回圖片內容 public function dump();
} //抽象類主要是為了程式碼層次,防止重複引用吧 abstract class AbstractImage implements Image{
protected $_width ;
protected $_height ;
protected $_path ;
protected $_data ;
public function getWidth(){
return $this ->_width;
} public function getHeight(){
return $this ->_height;
} public function getPath(){
return $this ->_path;
} } //真實主體 class RawImage extends AbstractImage{
public function __construct( $path ){
$this ->_path = $path ;
list( $this ->_width, $this ->_height) = getimagesize ( $path );
$this ->_data = file_get_contents ( $path );
} public function dump(){
return $this ->_data;
} } //代理 class ImageProxy extends AbstractImage{
public function __construct( $path ) {
$this ->_path = $path ;
list( $this ->_width, $this ->_height) = getimagesize ( $path );
} protected function _layzLoad(){
if ( $this ->_realImage === null) {
$this ->_realImage = new RawImage( $this ->_path);
} } public function dump(){
$this ->_layzLoad();
return $this ->_realImage->dump();
} } //Client類比沒有使用_data來輸出image class Client{
public function tag(Image $img ){
return ;
} } $path = `/home/jane/下載/0904190.jpg` ;
$client = new Client();
//_data資料會被載入 $image = new RawImage( $path );
echo $client ->tag( $image );
//_data資料不會被載入 $proxy = new ImageProxy( $path );
echo $client ->tag( $proxy );
|
本文轉自shayang8851CTO部落格,原文連結:http://blog.51cto.com/janephp/1346236,如需轉載請自行聯絡原作者
相關文章
- PHP設計模式-代理模式PHP設計模式
- 23種設計模式(7)-代理模式設計模式
- 設計模式----代理模式設計模式
- 設計模式——代理模式設計模式
- 設計模式-代理模式設計模式
- 設計模式~代理模式設計模式
- 【設計模式】代理模式設計模式
- 《設計模式》之代理模式設計模式
- js設計模式--代理模式JS設計模式
- Java設計模式—代理模式Java設計模式
- Java設計模式-代理模式Java設計模式
- Java設計模式:代理模式Java設計模式
- 設計模式(七)——代理模式設計模式
- 【設計模式之代理模式】設計模式
- 設計模式(九):代理模式設計模式
- 設計模式之代理模式設計模式
- 設計模式 #5 (策略模式、代理模式)設計模式
- 代理設計模式設計模式
- 設計模式 - 代理模式詳解設計模式
- 設計模式——代理模式的思考設計模式
- Javascript設計模式之代理模式JavaScript設計模式
- Java 設計模式(四)《代理模式》Java設計模式
- Javascript設計模式(五)代理模式JavaScript設計模式
- JS設計模式四:代理模式JS設計模式
- Java設計模式之代理模式Java設計模式
- 極簡設計模式-代理模式設計模式
- 設計模式學習——代理模式設計模式
- Python設計模式-代理模式Python設計模式
- 設計模式系列之「代理模式」設計模式
- 【大話設計模式】——代理模式設計模式
- Java設計模式9:代理模式Java設計模式
- 設計模式:代理模式---替罪羔羊設計模式
- 設計模式:代理模式詳解設計模式
- 軟體設計模式————(代理模式)設計模式
- 設計模式--介面卡模式/代理模式設計模式
- 設計模式_JAVA動態代理設計模式設計模式Java
- Java設計模式-之代理模式(動態代理)Java設計模式
- php設計模式–策略模式PHP設計模式