プロキシ パターン (プロキシ)。これは、オブジェクトの参照に使用される単純なハンドラ (またはポインタ) の拡張です。このポインタは、クライアント (Client) と実際のエグゼキュータの間に配置されるプロキシ (Proxy) オブジェクトに置き換えられます。 、ポインタには複数のターゲットが悪用できるフックがあります。
技術的に言えば、このパターンはクライアントと実際のサブジェクト (RealSubject) の間にプロキシ オブジェクトを挿入し、サブジェクト インターフェイスを維持し、そのメソッドをさまざまな方法で委任します。エージェントは、RealSubjects の遅延作成やデータのロード、他のマシンとのメッセージの交換、コピーオンライト ポリシーなど、すべてを透過的に行うことができます。これは HTTP プロキシに似ており、クライアント (ブラウザなど) とアプリケーションは HTTP サーバーとの接続に依存しており、プロキシは接続を管理しながら、アクセス制御や大きなダウンロード ファイルのキャッシュなどの他のタスクを実行できます。
プロキシモードのオブジェクトグラフは、デコレーションモードのオブジェクトグラフと構造が似ていますが、デコレータがオブジェクトに動的に動作を追加するのに対し、プロキシはクライアントからのアクセスを制御します。さらに、エージェントは必要な場合にのみ RealSubject を作成します。
2. Java RMI はリモート プロキシ オブジェクト (リモート プロキシ) を使用します。そのメソッドが呼び出されると、プロキシはパラメータをシリアル化し、ネットワーク上でリクエストを実行し、その呼び出しを別のノード上の実際のオブジェクトに委任します。リモート オブジェクトの場合、それらが同じマシン上にあるかどうかを心配する必要はありませんが、この透過性により実行が遅くなる可能性があります。
/**
* 件名インターフェイス。
* クライアントはこの抽象化のみに依存します。
*/
インターフェース画像
{
public function getWidth();
パブリック関数 getHeight();
パブリック関数 getPath();
/**
* @return string 画像のバイトストリーム
*/
パブリック関数 dump();
}
/**
* プロキシ
* と件名での定型コードの繰り返しを避けるための抽象クラス。ここでは、RealSubject を
* インスタンス化せずに提供できるメソッドのみを示します。
*/
抽象クラス AbstractImage は Image を実装します
{
protected $_width;
$_height を保護しました。
保護された $_path;
$_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;
}
}
/**
* プロキシ。本当に必須になるまで、画像データのロードを延期します。
* このクラスは、BLOB の実際のロードなど、非常にコストのかかる操作
* を延期するために最善を尽くします。
*/
class ImageProxy extends AbstractImage
{
public function __construct($path)
{
$this->_path = $path;
list ($this->_width, $this->_height) = getimagesize($path);
}
} / **&#&* /
プロテクション関数_lazyload()
{
if($ this-> _realimage === null){
$ this-> _realimage = new rawimage($ this-&gt ;_パス);
}
}
パブリック関数 dump()
{
$this->_lazyLoad();
return $this->_realImage->dump();
}
}
/**
* RawImage を作成し、その機能を利用します。
*/
class Client
{
public function tag(Image $img)
{
return ';
}
}
$path = '/home/giorgio/shared/Immagini/kiki.png';
$client = 新しいクライアント();
$image = 新しい RawImage($path); // BLOB の読み込みが行われます
echo $client->tag($image), "n";
$proxy = 新しい ImageProxy($path);
echo $client->tag($proxy), "n"; // ここでもロードは行われません
上記のコードは、PHP のプロキシ モードを実装しています。簡単に言えば、プロキシ パターンは、このオブジェクトへのアクセスを制御するために他のオブジェクトにプロキシを提供することです。
http://www.bkjia.com/PHPjc/327556.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/327556.html技術記事プロキシ パターン (Proxy)。これは、オブジェクトを参照するために使用される単純なハンドラ (またはポインタ) の拡張です。このポインタはプロキシ (Proxy) オブジェクトに置き換えられ、プロキシ オブジェクトはクライアント (...) に配置されます。