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

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

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

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

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

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

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

一 模式定義

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

二 模式舉例

1 模式分析

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

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

2 策略模式靜態類圖

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

3 代碼示例

3.1 創建策略接口一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;
  /**
   * 構造方法設置打折率
   */
  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 創建上下文環境一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;
/**
 * 上下文環境
 *
 * @author
 *
 */
public class context {
  // 當前策略
  private istrategy strategy;
  // 設置當前策略
  public void setstrategy(istrategy strategy) {
    this.strategy = strategy;
  }
  // 使用策略計算價格
  public double cul(double consumeprice) {
    // 使用具體商品促銷策略獲得實際消費金額
    double realprice = this.strategy.realprice(consumeprice);
    // 格式化保留小數點后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;
/**
 * 客戶端應用程序
 *
 * @author
 *
 */
public class client {
  /**
   * @param args
   */
  public static void main(string[] args) {
    // 創建上下問環境對象實例
    // context context = new context();
    // 隨機數對象
    random random = new random();
    for (int i = 0; i < 10; i++) {
      // 產生隨機數的方式判斷使用何種促銷策略
      int x = random.nextint(3);
      // 消費價格也是由隨機數產生的(不能為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 + " - 優惠后價格:" + realprice);
    }
  }
}

4 運行結果

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

三 該模式設計原則

1 "開-閉"原則

2 單一職責原則

四 使用場合

1 當多個類的表現行為不同,需要在運行時刻動態選擇具體執行的行為的時候。

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

3 需要隱藏具體策略的實現細節,各個具體策略彼此獨立的時候。

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

五 策略模式靜態類圖

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 人妖女天堂视频在线96 | 韩国三级大全 | 32pao强力打造免费高速高清 | 99re热这里只有精品 | 国产自产2023最新麻豆 | 小早川怜子亚洲综合中文字幕 | 日韩欧美在线观看综合网另类 | 国产精品亚洲专区一区 | 国产精品一久久香蕉产线看 | 非洲黑人又大粗gay 非洲黑人bbwbbwbbw | 农村老妇1乱69系列小说 | 国内精品福利丝袜视频_速 国内精品91久久久久 | 精品欧美一区二区在线观看欧美熟 | gogo人体模特啪啪季玥图片 | 亚洲乱码一区二区三区国产精品 | 亚洲午夜精品久久久久久抢 | 波多野结衣在线看 | 国产精品久久久久久久久ktv | 日韩在线观看一区二区不卡视频 | 日韩成人在线免费视频 | 美女黑人做受xxxxxⅹ | 逼毛片| 国产久视频 | 精品蜜臀AV在线天堂 | 国内精品视频九九九九 | 32pao强力打造免费高速高 | 奇米视频7777 | 欧美日韩一区二区三区在线视频 | 国产亚洲欧美一区二区三区 | 精品午夜寂寞黄网站在线 | 91久久国产青草亚洲 | 精品高潮呻吟99AV无码 | 九九精品视频在线观看 | 交换余生在线播放免费 | 香港三级血恋3 | 精品国产乱码久久久久久免费 | 欧美日韩中文国产一区二区三区 | 亚洲高清视频免费 | 日韩 国产 欧美 精品 在线 | 午夜dj影院在线观看完整版 | 99久久精品免费看国产一区 |