ホームページ  >  記事  >  Java  >  プロキシ

プロキシ

Susan Sarandon
Susan Sarandonオリジナル
2024-09-22 22:15:41392ブラウズ

プロキシ

プロキシは構造設計パターンの 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:次の記事: