動的プロキシ詳細アドレス
プロキシモードは、委任モードとも呼ばれます。素人の言葉で言えば、別のオブジェクトのエージェントとして機能するオブジェクトがあります。
オブジェクトに直接アクセスすることが困難または不可能な場合は、プロキシオブジェクトを介して間接的にアクセスできます。発信者に対して透過的であるため。デリゲートオブジェクトとプロキシオブジェクトの間に同じインターフェイスを実装する必要があります。
プロキシモードは、静的プロキシと動的プロキシに分けられます。
静的プロキシは主に、オブジェクトに直接アクセスしたくない場合は、プロキシクラスを使用してアクセスします。
静的プロキシモードについては、以下で詳しく説明します。
静的モードには多くの使用シナリオがあり、静的プロキシモードを作成する一般的な方法があります。抽出インターフェイスは、プロキシクラスおよびプロキシクラスとは別に実装されます。プロキシクラスは、コンストラクタを介してプロキシクラスに関連付けられます。次に、プロキシクラスのメソッドがプロキシクラスで呼び出されます。代理店の目的を達成するため。
例:これで、CompanyInterfaceとCompanyおよびCompanyAgentのインターフェイスがあります。
signContractメソッドがCompanyInterfaceから抽出されるようになりました。CompanyとCompanyAgentを使用して、それぞれこのメソッドを実装します。
public interface CompanyInterface {
//签订合同
public void signContract(String company);
}
会社の実装クラス:
public class Company implements CompanyInterface {
@Override
public void signContract(String company) {
System.out.println("我们和"+company+"签订合同了");
}
}
CompanyAgent実装クラス:エージェントを必要とするオブジェクトは、構築メソッドを介して渡されます。当社とのデカップリングを実現するため。ここで渡すのは、CompanyInterfaceの実装クラスです。
public class CompanyAgent implements CompanyInterface{
private CompanyInterface companyImpl;
public CompanyAgent(CompanyInterface companyImpl){
this.companyImpl = companyImpl;
}
@Override
public void signContract(String company) {
System.out.println("我代表公司和"+company+"签订合同了");
companyImpl.signContract(company);
}
}
呼び出すとき:プロキシクラスのメソッドが呼び出されます。実際には、プロキシのメソッドが呼び出されます。
public class AgentMain {
public static void main(String[] args) {
Company tencent = new Company();
CompanyAgent tencentAgent = new CompanyAgent(tencent);
tencentAgent.signContract("阿里巴巴");
}
}
結果: