デザインパターン-Proxy

Proxyパターンとは

Proxyパターンは、処理を受け持つ代理人オブジェクトを配置することで、処理を分散して負荷を軽減させるデザインパターンです。


Proxyパターンにおける代理人オブジェクトは、本人オブジェクトでなくてもできるような処理を任されます。

代理人オブジェクトでできない処理は本人オブジェクトが引き受けます。

これは、オブジェクトへの負荷を軽減を目的とする、代理処理を実施するための工夫となります。


「Proxy」とは「代理人」を意味します。


構成要素

  • Subject(主体・本人)
    • 「Proxy」と「RealSubject」の共通のインタフェースを定義します。
  • Proxy(代理人)
    • 「Subject」のインタフェースを実装します。
    • 「Client」からの要求を可能な限り処理しますが、どうしても自分で処理できない場合は、「RealSubject」に処理を委任します。
  • RealSubject(真の主体・本人)
    • 「Subject」のインタフェースを実装します。
    • 「Proxy」では処理できない場合に、「Proxy」から処理を委任されます。
  • Client(利用者)
    • 利用者

Proxyパターンの種類

実用的なProxyパターンは以下の通りです。


remote proxy(リモートプロキシ)

別アドレスにあるオブジェクトに対してのアクセスを提供するタイプのProxy。

つまり、これはプロセス間通信を実現します。

本物のオブジェクトがネットワーク越しか別プロセスにあるため、代理オブジェクトに本物のオブジェクトとの通信を任せて、あたかも本物のオブジェクトのように振舞わせる考え方。


virtual proxy(仮想プロキシ)

コストのかかるオブジェクトの作成を出来る限り先送りするタイプのProxy。

例えば、テキストと画像を読み込んで表示するような場合。

コストのかかる画像の読み込みを先送りにし、先にテキストデータを読み込んで、テキスト表示の終了後に、画像の読み込みを行うといったようなケース。


protection proxy

Protection (access) proxy:

オブジェクトの保護とアクセス制御するためのProxy。

オブジェクトにアクセスする際、代理に通じて権限チェックなどの操作を行う。

オブジェクトに応じてアクセス権を変更したいような場合に有効である。

これは、しばしばvirtual proxyと併用される。


Copy-on-write proxy:virtual proxyの特例。

オブジェクトのクーロン操作をできるだけ先送りする


Cache proxy(キャッシュプロキシ)

生成コストのかかるオブジェクトの生成にキャッシュ機構によって提供する。


Firewall proxy(ファイアウォールプロキシ)

ターゲットオブジェクトを悪意があるクライアントから隔離する。


Synchronization proxy(同期プロキシ)

マルチスレッド環境で同期する必要があるオブジェクトへのアクセス方法を提供する。



関連ページ