プロキシパターン


別のオブジェクトの代用代入先またはプレースホルダにアクセスを制御します.

参加者

  • Proxy :プロキシを実際のサブジェクトにアクセスさせるリファレンスを保持します.Providerは、対象とするインターフェイスが同じである場合、対象を参照することができます.インターフェイスは、実質的な件名の代わりに、プロキシを置き換えることができます本物の件名を提供します.本当の主題へのアクセスをコントロールして、それを作成して、削除することに責任があるかもしれません.他の責任はプロキシの種類に依存します:
    リモートプロキシは、要求とその引数をエンコードし、別のアドレス空間で実際のサブジェクトにエンコードされたリクエストを送信する責任があります.
    仮想プロキシは、それらがアクセスするのを延期することができるように、本当の主題に関する追加情報をキャッシュするかもしれません.例えば、
    動機からのimageproxyは本当のイメージの範囲をキャッシュします.
    保護プロキシは、呼び出し元が要求を実行するために必要なアクセス許可を持っていることを確認します.
  • subject :利用者がどこにでも使用できるように、realsubjectとproxyの共通インターフェースを定義します.
  • realsubject :プロキシが表す実オブジェクトを定義します.
  • コード


    public class Main {
    
        public static void main(String[] args) {
            Proxy proxy = new Proxy();
            proxy.request();
        }
    }
    
    public interface Subject {
        void request();
    }
    
    public class RealSubject implements Subject {
    
        @Override
        public void request() {
            System.out.println("Called RealSubject.Request()");
        }
    }
    
    public class Proxy implements Subject {
    
        private RealSubject realSubject;
    
        @Override
        public void request() {
            if (realSubject == null) {
                realSubject = new RealSubject();
            }
            realSubject.request();
        }
    }
    

    出力


    Called RealSubject.Request()
    

    エディエルジュリアン61 / デザインパターン