プロキシモード(プロキシ)
このオブジェクトへのアクセスを制御するために、他のオブジェクトにプロキシを提供します。プロキシ モードは、単純なポインタではなく、より一般的で複雑なオブジェクト ポインタが必要な場合に適しています。
該当シーン
- リモート プロキシは、さまざまなアドレス空間でオブジェクトのローカル表現を提供します。
- 仮想プロキシは、必要に応じて高価なオブジェクトを作成します。
- 保護プロキシは、元のオブジェクトへのアクセスを制御し、オブジェクトに異なるアクセス権が必要な場合に使用されます。
- スマート参照は単純なポインタを置き換え、オブジェクトにアクセスするときにいくつかの追加操作を実行します。一般的な用途には以下が含まれます: 実際のオブジェクトへの参照をカウントし、それらへの参照が行われていない場合に自動的に解放できるようにする: 初めて参照されるときに永続オブジェクトをメモリにロードする: 実際のオブジェクトにアクセスする前に、実際のオブジェクトがアクセスされているかどうかを確認する他のオブジェクトが変更できないようにロックされています。
✦ プロキシは、プロキシがエンティティにアクセスできるように参照を保存します。エンティティの代わりにプロキシを使用できるように、サブジェクトのインターフェイスと同じインターフェイスを提供します。エンティティへのアクセスを制御し、作成と削除を担当する場合があります。他の機能はプロキシに依存します。 タイプ: リモート プロキシは、リクエストとそのパラメータをエンコードし、エンコードされたリクエストを別のアドレス空間のエンティティに送信します。仮想プロキシは、エンティティへのアクセスを遅らせるためにエンティティの追加情報をキャッシュできます。保護プロキシは、呼び出し元が要求を満たすために必要なアクセス権を持っているかどうかを確認します。
✦ Subject は、RealSubject と Proxy の間の共通インターフェイスを定義するため、RealSubject が使用される場合はどこでも Proxy を使用できます。
✦ RealSubject は、Proxy によって表されるエンティティを定義します。
プロキシパターンサンプルコード(Java)
interface Subject {
public void buy();
}
class Proxy implements Subject {
protected RealSubject realSubject;
public Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
}
@Override
public void buy() {
System.out.println("办理购买前的手续");
realSubject.buy(); // 付钱
System.out.println("办理购买后的手续");
}
}
class RealSubject implements Subject {
@Override
public void buy() {
System.out.println("付钱");
}
}
public class ProxyPattern {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
Proxy proxy = new Proxy(realSubject);
proxy.buy();
}
}
他のデザイン パターンの詳細については、このコラムの他のブログ投稿を参照してください。
ソフト試験の準備中に協力してくれた zst_2001 に感謝します。ブロガー B ステーション
zst_2001の個人スペースに投稿されました。