プロキシ(プロキシ)デザインパターン

プロキシ(プロキシ)デザインパターン

背景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();
    }
}

4.0.2動的プロキシ実装...

おすすめ

転載: www.cnblogs.com/fengzhida/p/11373533.html