この記事では、ショッピングモールのプロモーション製品の問題を解決するためのJavaの戦略モードの使用について説明します。次のように、参照のために共有してください。
パターン定義
ポリシーモード:一連のアルゴリズムを定義し、各アルゴリズムをカプセル化し、同じ意味で使用できます。ポリシーモードにより、アルゴリズムはそれを使用する顧客アプリケーションとは独立して変更できます。
2番目のモードの例
1パターン分析
このモデルを説明するためにモールプロモーション製品を借りています。
2ポリシーモード静的クラス図
3つのコードの例
3.1ポリシーインターフェイスエストラテジーを作成します
パッケージcom.demo.strategy;/** *ポリシーインターフェイス * * @author * * */public interface istrategy {/** *実際の価格を計算する方法 * * @param消費プライス *消費量 * @return */public double realprice(double consumptionprice);}3.2 20%オフプロモーション戦略 - rebatestrategy
パッケージcom.demo.strategy;/** * 20%オフ製品プロモーション戦略 * * @author * */public class rebatestrategyはiStrategy {private final double rate; / ***構築方法セット割引率*/ public rebatestrategy(){this.rate = 0.8; } / ** *実際の価格方法を計算 * * @param ConsumptionPrice *消費量 * @return * / public double Realprice(double ConsumptionPrice){return ConsumptionPrice * this.rate; }}3.3 1000元以上の200オフのプロモーション戦略、還元
パッケージcom.demo.Strategy;/** * 200 OFF 1000を超える製品プロモーション戦略 * * @Author * */Public Class Reducestrategyは、実際の価格を計算するための方法 * * @param ConsumptionPrice * @return */public double realprice(double conductsprice){pultion conductsprice -consumptrice> = 1000) } else {return ConsumptionPrice; }}}3.4 200以上の元のプロモーション戦略のプロモーション戦略
パッケージcom.demo.strategy;/** * 200以上、200 * * @author * */public class promoricalsTrategyを実装するための製品プロモーション戦略で20%オフISTRATEGY {/** *実際の価格を計算する方法 * * @param消費プライス *消費量 * @return */public double realprice(double suctunptrice){if(dubal cussonprice>(200 + 200) 200) * 0.8; } else {return ConsumptionPrice; }}}3.5コンテキストの作成
パッケージcom.demo.context; import java.math.bigdecimal; import com.demo.strategy.istrategy;/** * Context Environment * * @author * */public class Context {//現在のポリシープライベートISTRATEY戦略。 //現在のポリシーの公開void setStrategy(iStrategy Strategy){this.strategy = Strategy; } //戦略を使用して価格のパブリックダブルカル(double conductsprice)を計算する{//特定の製品プロモーション戦略を使用して実際の消費量を取得しますDouble RealPrice = this.strategy.RealPrice(消費者); //小数点以降に1桁をフォーマットします。つまり、角度Bigdecimal bd = new bigdecimal(realprice)に正確です。 bd = bd.setscale(1、bigdecimal.round_down); return bd.doublevalue(); }}3.6消費者ショッピングと消費クライアント
パッケージcom.demo; import java.util.random;/** *クライアントアプリケーション * * @author * */public class client {/** * @param args */public static void main(string [] args){//上下環境オブジェクトのインスタンスを作成//作成// Context = new Context(); //ランダム数オブジェクトランダムランダム= new Random(); for(int i = 0; i <10; i ++){//乱数を生成する方法int x = random.nextint(3)を使用するプロモーション戦略を決定します。 //消費者価格は乱数によっても生成されます(0ではありません)Double ConsumptionPrice = 0; while((ConsupePrice = random.nextint(2000))== 0){} double RealPrice = ConsumptionPrice; switch(x){case 0:// 20%off製品// context.settrategy(new rebatestrategy()); RealPrice = ConsumptionPrice * 0.8;壊す;ケース1:// 200 // context.setstrategy(new Promotionalstrategy())を超える製品20%オフ; if(consoneprice> 200){realprice = 200 +(消費者-200) * 0.8; } 壊す;ケース2:// 1000を超える購入のために200オフif(consoneprice> = 1000){RealPrice = ConsumptionPrice -200; } 壊す; } system.out.print( "【" +(x == 0? "200を超える購入で20%オフ":(x == 1? "1000を超える購入で20%オフ": "") + "】product:"); System.out.println( "元の価格:" + ConsumptionPrice + " - 割引後の価格:" + RealPrice); }}}4ランニング結果
1000を超える購入のために200オフ】製品:元価格:908.0-割引後の価格:908.0
1000を超える購入のために200オフ】製品:元価格:1129.0-割引後の価格:929.0
1000を超える購入のために200オフ】製品:元価格:829.0-割引後の価格:829.0
[20%オフ]製品:元の価格:518.0-割引後の価格:414.40000000000003
1000を超える購入のために200オフ】製品:オリジナル価格:1230.0-割引後の価格:1030.0
【20%オフ】製品:元の価格:106.0-割引後の価格:84.80000000000001
1000を超える購入のために200オフ】製品:元価格:1134.0-割引後の価格:934.0
[200を超える部品で20%オフ]製品:元の価格:664.0-割引後の価格:571.2
1000を超える購入のために200オフ】製品:元価格:564.0-割引後の価格:564.0
1000を超える購入のために200オフ】製品:元価格:730.0-割引後の価格:730.0
このパターンのデザインの3つの原則
1「オープンクローズ」原則
2単一責任の原則
4つの使用機会
1複数のクラスのパフォーマンス動作が異なり、実行時に特定の実行動作を動的に選択する必要がある場合。
2さまざまな状況でさまざまな戦略を使用する必要があります。そうしないと、将来的には戦略が他の方法で実装される場合があります。
3特定の戦略の実装の詳細を非表示にする必要がある場合、各特定の戦略は互いに独立しています。
4クラスで複数の動作が発生し、複数の条件付きブランチが複数の動作の使用を判断するために使用される場合、ポリシーパターンを使用して、各条件分岐のアクションを特定の戦略に埋め込むことができます。
5つの戦略モード静的クラス図
Java関連のコンテンツを増やすために、このサイトに興味のある読者は、「Javaオブジェクト指向プログラミングに関する紹介と高度なチュートリアル」、「Javaデータ構造とアルゴリズムに関するチュートリアル」、Java Operation domノードスキルの要約」、「Javaファイルの概要、およびJava操作スキルの概要」の概要を見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。