定義:
プロキシオブジェクトを使用してユーザーリクエストを完了し、実際のオブジェクトへのユーザーアクセスをブロックします
アプリケーションシナリオ:
- セキュリティ上の理由から、クライアントが実際のオブジェクトに直接アクセスするのをブロックする必要があります
- リモート呼び出しを行うときは、プロキシクラスを使用してリモートメソッド呼び出しの技術的な詳細を処理する必要があります
- システムパフォーマンスを向上させるには、実際のオブジェクトをカプセル化して遅延読み込みの目的を達成します
構造:
役割 | 効果 |
---|---|
インターフェイスクラス | エージェントクラスと実際のビジネスクラスのパブリック外部メソッドを定義します |
実際のビジネス | ビジネスロジックを実際に実装するクラス |
プロキシクラス | プロキシとパッケージ化に使用[実際のビジネスクラス] |
クライアント | エージェントクラスを使用してビジネスを完了する |
ケース:(遅延読み込み)
インターフェイスクラス:
public interface QueryInterface {
void outStr();
}
実際のビジネスクラス:
public class QueryImp implements QueryInterface{
public QueryImp() {
try{
//重量级对象
Thread.sleep(3000);
System.out.println("处理业务逻辑");
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void outStr() {
System.out.println("输出方法:aaa");
}
}
エージェントクラス:
public class QueryImpProxy implements QueryInterface {
//轻量级对象
private static class GetQueryImp{
//在真正需要的时候才创建真实对象,因为创建真实对象的时候会有业务逻辑,耗时较长
private static QueryImp queryImp=new QueryImp();
};
@Override
public void outStr() {
GetQueryImp.queryImp.outStr();
}
}
クライアント:
public class TestApp {
public static void main(String[] args){
System.out.println("开始(使用代理):"+ DateUtils.getCurrDateTime());
QueryInterface inter=new QueryImpProxy();//使用代理
// inter.outStr();//真正使用的时候才创建真实对象
System.out.println("结束(使用代理):"+ DateUtils.getCurrDateTime());
System.out.println("开始(未使用代理):"+ DateUtils.getCurrDateTime());
QueryInterface inter1=new QueryImp();//未使用代理,在此直接创建真实对象
// inter1.outStr();
System.out.println("结束(未使用代理):"+ DateUtils.getCurrDateTime());
}
}
クライアントの実行結果:
総括する:
プロキシモードを使用して遅延読み込みを実装すると、システムの速度が効果的に向上し、ユーザーエクスペリエンスが向上します。