📢 この記事は gemini-3-flash-preview によって翻訳されました
プロキシパターン (Proxy Pattern) オブジェクト構造型パターン
意図
他のオブジェクトへのアクセスをコントロールするために、そのオブジェクトの身代わり(代理人)を提供するよ。
構造

役割分担はこんな感じ:
- Proxy (代理人):実際のオブジェクト(RealSubject)への参照を持っていて、代理としてアクセスを受け付けるよ。Subject と同じインターフェースを持っているから、使う側は本物だと思って扱えるんだ。本物へのアクセスを制限したり、必要に応じて本物の生成や削除も担当するよ。
- Subject (インターフェース):RealSubject と Proxy に共通のインターフェースを定義するよ。これがあるおかげで、RealSubject が必要な場所ならどこでも Proxy を代わりに使えるようになるんだ。
- RealSubject (実体):Proxy が代理を務める、実際のオブジェクトだよ。
どんな時に使う?
単純なポインタよりも、もっと多機能だったり複雑な制御が必要な時にプロキシパターンが使われるよ。よくあるケースをいくつか紹介するね。
- リモートプロキシ (Remote Proxy):別の場所に(別のサーバーとかに)あるオブジェクトを、まるで手元にあるかのように見せたい時に使うよ。
- 仮想プロキシ (Virtual Proxy):作るのに時間がかかる重いオブジェクトを、本当に必要になるまで作らない(遅延生成)ようにする時に使うよ。
- 保護プロキシ (Protection Proxy):アクセス権限をチェックして、元のオブジェクトを勝手に触られないようにガードしたい時に使うよ。
- スマートリファレンス (Smart Reference):オブジェクトにアクセスする時に、ついでに何か処理をさせたい時に使うよ。例えば、参照カウンターを増やしたり、最初にアクセスした時にメモリにロードしたり、他の人が書き換えないようにロックをかけたりするんだ。
例
仲介業者が代わりに買い物をするイメージのコードだよ。
| |