プロキシ(プロキシ)デザインパターン
背景1.0.0生成されたプロキシモード
- システムは、コアを有し、コードのコア機能は、基本的な達成することです。
- いくつかのケースでは、ビジネスのニーズを満たすために、我々は(後に既存のコアを強化する必要があります)()の前にも囲まれた前後の他の方法。
道の既存のクラスを強化する1.0.1
- 一つの解決策は、継承、オーバーライド、またはコアを強化変換することです。
- 、オブジェクトを変更または変換するように修正されるコアは、プロキシモードを介して操作の強化に達しています。
プロキシクラスを強化する場合は1.0.2のはなぜでしょうか?
- 継承は、インターフェイスまたは親クラスを公開します
- 演技は、異なるオブジェクトの数、完全なソリューションオブジェクトをパッケージ化することができます。
- この方法は、パラメータの機能を実現するためにプロキシを使用することができ、またはインターフェースは、任意の親クラス、より良好なカプセル化に曝されません。これは、言語を言うことですもちろん、反射の動作の異なる方法は、クラスの機能を読み取ることができます。
2.0.0定義されたプロキシモード
A、Bは、基準Aに含まれるオブジェクトへのプロキシオブジェクトBを作成し、次にモードの動作を制御することにより、プロキシモード。
例の現実:B労働問題が法廷にアピールするため、Aは法律を理解していない、我々は最高の結果を達成するために、プロキシを行くとCにする必要があります。
Javaの``
クラスA {
公共ボイド調製材料(){}
公共ボイド食べる(){}
公共ボイド睡眠(){}
}
C {クラス
プライベートA A;
公共C(A)= {this.a;}
公共ボイドアピール(){獲得材料();()のための法的根拠、アクションを完了するために();}
プライベートボイド獲得材料() {準備材料();}
プライベートボイド(){}の法的根拠
プライベート訴訟完全無効(){}
}
// CはクラスAのエージェントはあるが、我々はCインタフェースや機能のいずれかにアクセスすることはできません。
`` `
3.0.0分類プロキシモード
作成の時間に応じて行動します:
- --->すでにコンパイル時に作成された静的なプロキシモード
- 良い期間を作成--->ダイナミックプロキシモードを実行します
コンパイル時間は何3.0.1は?ランは何ですか?...
4.0.0プロキシモードを実装
4.0.1静的プロキシの実装
@Slf4j
public class Proxy {
class Worker {
public void eat() {log.info("{}", "eat");}
public void sleep() {log.info("{}", "sleep");}
public void work() {log.info("{}", "work");}
}
class WorkerProxy {
private Worker worker;
public WorkerProxy(Worker worker) {this.worker = worker;}
public void work() {
before();
worker.work();
after();
}
private void before() {log.info("{}", "before");}
private void after() {log.info("{}", "after");}
}
public static void main(String[] args) {
Proxy proxy = new Proxy();
Worker worker = proxy.new Worker();
WorkerProxy workerProxy = proxy.new WorkerProxy(worker);
workerProxy.work();
}
}