Proxyパターンとは、他のオブジェクトへのアクセスを制御するための代理オブジェクトを作るデザインパターンだ。これにより、オブジェクトへのアクセスを間接的に行うことで、コントロールを効率的にできる。
たとえば、ゲームの中で遠くにいる敵キャラクターの詳細なデータを、プレイヤーが近づくまでロードしないようにする場面で使える。
では、サンプルコードを一緒に見ていこう。
まずは、実際に行いたい処理を持つクラスを作ろう。例えば、リモートの動画をストリーミングするサービスを考えよう。このクラスは
playVideo() というメソッドで動画を再生する。
// 実際のサービス
class RealVideoService {
playVideo() {
console.log("リモートサーバーから動画を再生中...");
}
}
次に、Proxyを作る。このクラスは、本当のサービスを呼び出す前に何か追加の処理を行う。たとえば、キャッシュを使って動画を無駄に再取得しないようにすることを考えてみよう。
// Proxyクラス
class VideoServiceProxy {
constructor() {
this.realVideoService = new RealVideoService();
this.cache = null;
}
playVideo() {
if (!this.cache) {
console.log("キャッシュがないため、リモートサーバーから取得します...");
this.realVideoService.playVideo();
this.cache = "cached video";
} else {
console.log("キャッシュされた動画を再生します...");
}
}
}
Proxyクラスを使って、まずはリモートサーバーから動画を取得し、その後はキャッシュを使って再生するようにしてみよう。
// Proxyを使って動画を再生
const proxy = new VideoServiceProxy();
proxy.playVideo(); // リモートサーバーから動画を再生中...
proxy.playVideo(); // キャッシュされた動画を再生します...
これでProxyパターンの解説は終わりだ。
このパターンを使うと、オブジェクトへのアクセスを効率的に管理し、リソースを節約できるため、遠隔操作や遅延ロードなどの場面で非常に役立つ。