この記事では、Javaのプロキシモデルに基づいて赤ワイン分布を解決する問題について説明します。次のように、参照のために共有してください。
1。パターン定義
プロキシモードでは、2つのオブジェクトが同じ要求の処理に参加します。受信したリクエストは、プロキシオブジェクトによって実際のオブジェクトを処理するために委託されます。プロキシオブジェクトは、クライアントアプリケーションと実際のオブジェクトとの間に媒介ブリッジを再生するリクエストのアクセスを制御します。プロキシモードは、継承の代わりにオブジェクト集約を使用し、ソフトウェアモジュール間の結合を効果的に削減します。
2。モデルの例
1パターン分析
このモデルを説明するためにワインの流通を借りています。
2プロキシモード静的クラス図
3つのコードの例
3.1赤ワイン工場インターフェイス1 Iredwine
パッケージcom.demo.real;/** *赤ワインインターフェイス * * @author * */public interface iredwine {//赤ワインpublic void product(); //ワインの販売方法public void sell();}3.2赤ワイン工場でのRealRedWineFactoryの実現
パッケージcom.demo.real.impl; Import com.demo.real.iredwine;/** * Real Wine Production Factory * * @author * * */public class RealredwineFactory Implesise Iredwine {// Red Wine @Override Public void Product(){System.out.out.println( "Red Wine ..." Red Wine ... "); } //ワインの販売方法public public void sell(){System.out.println( "赤ワイン工場が赤ワインを販売する..."); }}3.3赤ワインのエージェント - RedWineProxyを作成します
パッケージcom.demo.proxy; Import com.demo.real.iredwine;/** * Red Wine Agent * * @author * */Public Class RedWineProxy IredWine {// Real Red Wine Manufacturer Private Final Iredwine Redwine; //赤ワインのプライベートファイナルブール許可を販売するエージェント許可= true; //デフォルト建設方法public redwineproxy(iredwine redwine){this.redwine = redwine; } //赤ワインを生産するためのエージェント方法(エージェントは赤ワインを生産せず、実際の工場からワインを販売するために撮影します)@Override public void product(){//エージェントが赤ワインになる権利を持っているかどうかを判断します(this.permission){//エージェントが赤ワインを販売する権利があります。 system.out.println( "エージェントは注文を受け取り、工場に生産するように通知します..."); this.redwine.product(); } else {system.out.println( "[これは違法な赤ワインのエージェント!]"); }} // agent @override public void sellのために赤ワインを販売する方法{if(this.permission){this.redwine.sell(); System.out.println( "エージェントは工場から卸売りの赤ワインを取得し、より高い価格で販売し、それから一定の違いをもたらします...」); } else {system.out.println( "[これは違法な赤ワインのエージェント!]"); }}}3.4ワインエージェントに行って赤ワインのクライアントを購入する
パッケージcom.demo; import com.demo.proxy.redwineproxy;インポートcom.demo.real.iredwine; Import com.demo.real.realredwineFactory;/** * @author * */public class client {/** * @author */public class cliencs * @param args [/cravers bioid [/ *]インスタンスIredwine realredWineFactory = new RealRedWineFactory(); //プロキシオブジェクトインスタンスを入手してくださいIredwine RedWineProxy = new RedWineProxy(RealRedWineFactory); //エージェントは赤ワイン(実際には実際の生産が工場です)RedWineProxy.Product()を生産します。 //エージェントは赤ワイン(卸売価格を販売してから、より高い価格で販売して差を獲得します)RedWineProxy.Sell(); }}4ランニング結果
[これは合法的な赤ワインのエージェントです]
エージェントは注文を受け取り、工場に生産を通知しました...
赤ワイン工場は赤ワインを生産しています...
赤ワイン工場は赤ワインを販売しています...
エージェントは工場から卸売りの赤ワインを獲得し、より高い価格で販売し、それから一定の価格差を稼ぎます...
iii。このパターンの設計原則
1システムの効率を改善するために遅延ロード
2単一責任の原則
4.機会を使用します
1リモートプロキシ:異なるアドレススペースにあるオブジェクトのローカルプロキシを提供します。
2仮想エージェント:オブジェクトの作成が時間がかかる場合は、プロキシオブジェクトを介して呼び出すことができます。実際のオブジェクトが作成される前に、誤った呼び出しが返されます。実際のオブジェクトが作成されると、実際のオブジェクトの対応するメソッド呼び出しがクライアントに返されます。
3保護エージェントは、元のオブジェクトへのアクセスを制御します。
4スマートガイドラインは、オブジェクトにアクセスするときに追加の操作を実行する単純なポインターに取って代わります。
V.プロキシモードの静的クラス図
要約の役割:実際のオブジェクトとプロキシオブジェクトを宣言する共通のインターフェイス。
本当の役割:リクエストを本当に処理するターゲットオブジェクト。
エージェントの役割:プロキシオブジェクトの役割には、実際のオブジェクトへの参照が含まれているため、プロキシオブジェクトはリクエストを実際のオブジェクトに変換することができます。同時に、プロキシオブジェクトは、実際のオブジェクト操作を実行する前後に追加の操作を追加することもできます。
Java関連のコンテンツについては、このサイトに興味のある読者は、「Javaデータ構造とアルゴリズムのチュートリアル」、「Java操作DOMノードのヒントの概要」、「Javaファイルの要約およびディレクトリ操作のヒント」、「Java Cache操作のヒントの要約」というトピックを見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。