プロキシは構造設計パターンの 1 つで、元のオブジェクトのアクセスを制御するために使用されるサロゲートまたはプレースホルダー オブジェクトを作成するために使用されます。
これは、追加レベルの制御を追加する仲介者として機能し、リクエストを実際のオブジェクトに委任する前後に追加のアクションを実行できます。
主要な概念:
プロキシ オブジェクト: 実際のオブジェクトを表し、そのオブジェクトへのアクセスを制御します。
Real Object (サブジェクト): 作業を行う実際のオブジェクト。
クライアント: 実際のオブジェクトではなくプロキシと直接対話するエンティティ。
画像を例にしてこれを理解してみましょう。
//Object interface public interface Image{ public void display(); } //Real object public class RealImage implements Image { private String file; public RealImage(String fileName){ this.file = fileName; loadImageFromDisk(); } @Override public void display(){ System.out.println("Rendering image : "+ file); } private void loadImageFromDisk(){ System.out.println("Loading image "+file+" from disk"); } } //プロキシ class public class プロキシImage implements Image { private Image image; private String file; public プロキシImage(String fileName){ this.file =fileName; } @Override public void display(){ if(image ==null){// create object of RealImage only if the image reference is null, thus resulting in LazyIntialization //( i.e. Initializing the object only when it is needed not beforehand) image = new RealImage(file); } image.display(); } } // client public class Main { public static void main(String args[]){ Image image = new プロキシImage("wallpaper.png"); //image is loaded and displayed for the first time image.display(); //image will not be loaded again, only display will be called image.display(); } }
出力:
Loading image wallpaper.png from disk Rendering image : wallpaper.png
使用例:
遅延初期化: 絶対に必要になるまでオブジェクトの作成を遅らせます。
アクセス制御: ユーザーの役割または権限に基づいて特定のメソッドへのアクセスを制限します。
ロギング: ロギングまたはモニタリング機能を追加します。
以上がプロキシの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。