一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務(wù)器之家 - 編程語言 - Java教程 - Java使用策略模式解決商場促銷商品問題示例

Java使用策略模式解決商場促銷商品問題示例

2021-04-25 11:45chengqiuming Java教程

這篇文章主要介紹了Java使用策略模式解決商場促銷商品問題,簡單描述了策略模式的概念、原理,并結(jié)合實例形式分析了Java基于策略模式解決商品促銷問題的相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了java使用策略模式解決商場促銷商品問題。分享給大家供大家參考,具體如下:

一 模式定義

策略模式:定義一系列的算法,將每一種算法封裝起來并可以相互替換使用,策略模式讓算法獨立于使用它的客戶應(yīng)用而獨立變化。

二 模式舉例

1 模式分析

我們借用商場促銷商品來說明這一模式。

Java使用策略模式解決商場促銷商品問題示例

2 策略模式靜態(tài)類圖

Java使用策略模式解決商場促銷商品問題示例

3 代碼示例

3.1 創(chuàng)建策略接口一istrategy

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.demo.strategy;
/**
 * 策略接口
 *
 * @author
 *
 */
public interface istrategy {
  /**
   * 計算實際價格方法
   *
   * @param consumeprice
   *      消費金額
   * @return
   */
  public double realprice(double consumeprice);
}

3.2 八折促銷策略一rebatestrategy

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.demo.strategy;
/**
 * 打八折商品促銷策略
 *
 * @author
 *
 */
public class rebatestrategy implements istrategy {
  private final double rate;
  /**
   * 構(gòu)造方法設(shè)置打折率
   */
  public rebatestrategy() {
    this.rate = 0.8;
  }
  /**
   * 計算實際價格方法
   *
   * @param consumeprice
   *      消費金額
   * @return
   */
  public double realprice(double consumeprice) {
    return consumeprice * this.rate;
  }
}

3.3 滿1000減200促銷策略一reducestrategy

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.demo.strategy;
/**
 * 滿1000減200 商品促銷策略
 *
 * @author
 *
 */
public class reducestrategy implements istrategy {
  /**
   * 計算實際價格方法
   *
   * @param consumeprice
   *      消費金額
   * @return
   */
  public double realprice(double consumeprice) {
    if (consumeprice >= 1000) {
      return consumeprice - 200;
    } else {
      return consumeprice;
    }
  }
}

3.4 200以上部分打8折促銷策略一promotionalstrategy

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.demo.strategy;
/**
 * 滿200,高于200部分打八折 商品促銷策略
 *
 * @author
 *
 */
public class promotionalstrategy implements istrategy {
  /**
   * 計算實際價格方法
   *
   * @param consumeprice
   *      消費金額
   * @return
   */
  public double realprice(double consumeprice) {
    if (consumeprice > 200) {
      return 200 + (consumeprice - 200) * 0.8;
    } else {
      return consumeprice;
    }
  }
}

3.5 創(chuàng)建上下文環(huán)境一context

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.demo.context;
import java.math.bigdecimal;
import com.demo.strategy.istrategy;
/**
 * 上下文環(huán)境
 *
 * @author
 *
 */
public class context {
  // 當(dāng)前策略
  private istrategy strategy;
  // 設(shè)置當(dāng)前策略
  public void setstrategy(istrategy strategy) {
    this.strategy = strategy;
  }
  // 使用策略計算價格
  public double cul(double consumeprice) {
    // 使用具體商品促銷策略獲得實際消費金額
    double realprice = this.strategy.realprice(consumeprice);
    // 格式化保留小數(shù)點后1位,即:精確到角
    bigdecimal bd = new bigdecimal(realprice);
    bd = bd.setscale(1, bigdecimal.round_down);
    return bd.doublevalue();
  }
}

3.6 消費者購物消費一client

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.demo;
import java.util.random;
/**
 * 客戶端應(yīng)用程序
 *
 * @author
 *
 */
public class client {
  /**
   * @param args
   */
  public static void main(string[] args) {
    // 創(chuàng)建上下問環(huán)境對象實例
    // context context = new context();
    // 隨機數(shù)對象
    random random = new random();
    for (int i = 0; i < 10; i++) {
      // 產(chǎn)生隨機數(shù)的方式判斷使用何種促銷策略
      int x = random.nextint(3);
      // 消費價格也是由隨機數(shù)產(chǎn)生的(不能為0)
      double consumeprice = 0;
      while ((consumeprice = random.nextint(2000)) == 0) {
      }
      double realprice = consumeprice;
      switch (x) {
      case 0:
        // 打八折商品
        // context.setstrategy(new rebatestrategy());
        realprice = consumeprice * 0.8;
        break;
      case 1:
        // 滿200,高于200部分打八折 商品
        // context.setstrategy(new promotionalstrategy());
        if (consumeprice > 200) {
          realprice = 200 + (consumeprice - 200) * 0.8;
        }
        break;
      case 2:
        // 滿1000減200 商品
        // context.setstrategy(new reducestrategy());
        if (consumeprice >= 1000) {
          realprice = consumeprice - 200;
        }
        break;
      }
      system.out.print("【"
          + (x == 0 ? "打八折" : (x == 1 ? "高于200部分打八折"
              : (x == 2 ? "滿1000減200" : ""))) + "】商品:");
      system.out.println("原價:" + consumeprice + " - 優(yōu)惠后價格:" + realprice);
    }
  }
}

4 運行結(jié)果

【滿1000減200】商品:原價:908.0 - 優(yōu)惠后價格:908.0
【滿1000減200】商品:原價:1129.0 - 優(yōu)惠后價格:929.0
【滿1000減200】商品:原價:829.0 - 優(yōu)惠后價格:829.0
【打八折】商品:原價:518.0 - 優(yōu)惠后價格:414.40000000000003
【滿1000減200】商品:原價:1230.0 - 優(yōu)惠后價格:1030.0
【打八折】商品:原價:106.0 - 優(yōu)惠后價格:84.80000000000001
【滿1000減200】商品:原價:1134.0 - 優(yōu)惠后價格:934.0
【高于200部分打八折】商品:原價:664.0 - 優(yōu)惠后價格:571.2
【滿1000減200】商品:原價:564.0 - 優(yōu)惠后價格:564.0
【滿1000減200】商品:原價:730.0 - 優(yōu)惠后價格:730.0

三 該模式設(shè)計原則

1 "開-閉"原則

2 單一職責(zé)原則

四 使用場合

1 當(dāng)多個類的表現(xiàn)行為不同,需要在運行時刻動態(tài)選擇具體執(zhí)行的行為的時候。

2 需要在不同情況下使用不同策略,或者策略還可能在未來用其它方式實現(xiàn)的時候。

3 需要隱藏具體策略的實現(xiàn)細(xì)節(jié),各個具體策略彼此獨立的時候。

4 當(dāng)一個類中出現(xiàn)了多種行為,而且在一個操作中使用多個條件分支來判斷使用多種行為的時候,可以使用策略模式將各個條件分支的動作植入具體策略中實現(xiàn)。

五 策略模式靜態(tài)類圖

Java使用策略模式解決商場促銷商品問題示例

希望本文所述對大家java程序設(shè)計有所幫助。

原文鏈接:https://blog.csdn.net/chengqiuming/article/details/70139404

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产一区二区三区四卡 | 女人张开腿 让男人桶个爽 免费观看 | 热色综合 | 国内精品一区二区在线观看 | 图片专区小说专区卡通动漫 | 日本一区二区免费在线观看 | 成人永久免费福利视频网站 | 国产成人h视频在线播放网站 | 成人无高清96免费 | 色老女人 | 射逼网| gaygayas男男免费中国 | bl双性小说| 香蕉eeww99国产精选播放 | 四虎国产精品视频免费看 | 日本五十路六十30人8时间 | 沉沦艳妇杨幂肉体小说 | 天天快乐在线观看 | 69成人影院 | 精品国产剧情在线观看 | 91制片厂制作传媒免费版樱花 | chinesespank打屁股| 亚洲精品视频免费在线观看 | 九九热这里只有精品视频免费 | 日本男男gaygays | 日本视频二区 | 无码国产成人777爽死在线观看 | 成人中文字幕在线观看 | 校花被老头夺去第一次动图 | 欧美人禽杂交狂配无删完整 | 日本免费高清在线 | 色啪久久婷婷综合激情 | 亚洲精品一区二区三区在线观看 | china国产bbw | 免费国产在线视频 | 人皮高跟鞋在线观看 | 久青草国产97香蕉在线视频 | 美女脱了内裤打开腿让人桶网站o | 妹妹骑上来蹭着蹭着就射了 | 亚洲第五色综合网啪啪 | juy_661佐佐木明希在线播放 |