国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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 策略模式靜態(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;
  /**
   * 構造方法設置打折率
   */
  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 {
  // 當前策略
  private istrategy strategy;
  // 設置當前策略
  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;
/**
 * 客戶端應用程序
 *
 * @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 運行結果

【滿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

三 該模式設計原則

1 "開-閉"原則

2 單一職責原則

四 使用場合

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

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

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

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

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

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

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

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

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 成人伊人| 中文字幕一区二区三区四区 | 免费视频成人国产精品网站 | 日韩成人在线观看 | 国产精品一区二区三区不卡 | 国产一区二区三区久久久久久久久 | 精品成人国产在线观看男人呻吟 | 91社影院在线观看 | av在线入口| av在线播放网站 | 四虎免费紧急入口观看 | 日本不卡高字幕在线2019 | 色狠狠久久av五月综合 | 亚洲精品久久久一区二区三区 | 欧美成人激情视频 | 亚洲视频在线观看 | 免费性大片 | 欧美久久久久久久 | 午夜在线电影 | 中文字幕亚洲一区二区三区 | 国产精品一区二区久久久 | 天堂在线免费视频 | 亚洲成人三级 | 久久久久久久久久久国产 | 夜夜av | 精品久久久一区 | 亚洲一区视频 | 久久69精品久久久久久久电影好 | 中文字幕欧美日韩 | 特及毛片 | 日韩精品影院 | 91精品国产综合久久福利软件 | 中文字幕在线三区 | 亚洲精品无码专区在线播放 | 亚洲国产成人在线 | 亚洲三级不卡 | 在线观看特色大片免费网站 | 欧美日韩精品 | 日韩第一区| 国产精品久久久久久久久久99 | 亚洲第一视频网站 |