日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

精通Java设计模式从初见到相爱之工厂+策略模式(3)

發(fā)布時間:2023/12/6 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 精通Java设计模式从初见到相爱之工厂+策略模式(3) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

1、公司項目需求。

????用戶簽到活動,會員簽到怎么處理,超級會員怎么處理,普通用戶簽到怎么處理,針對不同的檔次,有不同的方案,所以在項目中用到了策略模式以及簡單工廠模式。

? ? 其實生活中,我們用到的軟件系統(tǒng)都會有這樣的制定級別,比如我們是實體店,他也有一個會員制度,打9折,打七折,打六折的都有,包括我們做頭發(fā),也都有不同級別的剪發(fā)卡.... 這些理發(fā)店啊、服裝店啊還有什么美容spa店等等用的軟件都會涉及,這就是我們所說的策略模式。

2、策略模式的概念

? ? 概念:針對一類問題,用不同的方式的解決,這就是策略模式!

? ? 舉例1:明星演唱會,我們?nèi)ベI門票,路人甲買的一等座,路人乙買的二等座,路人丙買的外圍座,雖然他們都能看到明星演唱,但是位置不同,針對買座位的不同級別來設(shè)置他們的觀看明星位置,就是策略模式!

? ? 舉例2:去李寧專賣店買衣服,路人甲和路人乙買同一件衣服,雖然都能買到衣服,但是路人甲是會員,路人乙是普通用戶,他們支付的錢不一樣,路人甲花錢少,針對買衣服不同人的級別折扣不一樣,就是策略模式!

3、代碼實現(xiàn)

? ? 項目中用到的比較多,例如商城會員、簽到級別、游戲上、這種項目用的策略設(shè)計模式比較多

? ? 說個場景,服裝店,買衣服,會員級別分別是:AVip、BVip、CVip 和沒有會員的用戶NoVip,四個級別,打折情況分別是0.6、0.7、0.9和沒有打折

? ? 打折的接口

public interface DisCount {//買東西給折扣Double disCount(Double money); }

不同會員級別的實現(xiàn)類,不同的折扣

package ceLve;public class AVip implements DisCount {@Overridepublic Double disCount(Double money) {return money * 0.6 ;} } package ceLve;public class BVip implements DisCount {@Overridepublic Double disCount(Double money) {return money * 0.7;} } package ceLve;public class CVip implements DisCount {@Overridepublic Double disCount(Double money) {return money * 0.9;} } package ceLve;public class NoVip implements DisCount {//普通用戶不能打折@Overridepublic Double disCount(Double money) {return money;} } package ceLve;public class Customer {//客戶消費總金額private Double totalAccount =0D;//客戶目前消費金額private Double currentAccount = 0D;//默認消費者 沒有會員等級private DisCount disCount = new NoVip();//消費者 消費商品、衣服的方法public void buy(Double money){this.currentAccount = money;totalAccount += money;if (totalAccount >= 10000){disCount= new AVip();}else if (totalAccount >= 6000){disCount= new BVip();}else if (totalAccount >= 3000){disCount= new CVip();}else {disCount= new NoVip();}}// 消費者支付public double pay(){return disCount.disCount(currentAccount);}public Double getTotalAccount() {return totalAccount;}public void setTotalAccount(Double totalAccount) {this.totalAccount = totalAccount;}public Double getCurrentAccount() {return currentAccount;}public void setCurrentAccount(Double currentAccount) {this.currentAccount = currentAccount;}}

最后在main函數(shù)中執(zhí)行:

package ceLve;public class Main {public static void main(String[] args){Customer customer = new Customer();customer.buy(5000.00);System.out.println(customer.pay());} }

運行結(jié)果:4500.00

????上面是純粹的是策略模式,現(xiàn)在我要加上簡單工廠模式,其實加上與不加上沒有什么區(qū)別,就自我感覺就是吃飯為什么非要用右手使用筷子,而不是左手,小時候家長我只要用左手就打我手。因為我們中國的傳統(tǒng)就是右手,所以因為傳統(tǒng)的原因,目前簡單工廠設(shè)計模式也如此,也基本沒什么用,但有人會說硬編碼,不能隨隨便便new,那好吧,今天把簡單工廠模式也加進去。

? ? 修改方案:修改Customer類,新增簡單工廠類CountFactory

package ceLve;public class Customer {//客戶消費總金額private Double totalAccount =0D;//客戶目前消費金額private Double currentAccount = 0D;//默認消費者 沒有會員等級private DisCount disCount = new NoVip();//消費者 消費商品、衣服的方法public void buy(Double money){this.currentAccount = money;totalAccount += money;disCount = CountFactory.createCount(this);}// 消費者支付public double pay(){return disCount.disCount(currentAccount);}public Double getTotalAccount() {return totalAccount;}public void setTotalAccount(Double totalAccount) {this.totalAccount = totalAccount;}public Double getCurrentAccount() {return currentAccount;}public void setCurrentAccount(Double currentAccount) {this.currentAccount = currentAccount;}} public class CountFactory {private CountFactory(){}public static DisCount createCount(Customer customer){if (customer.getTotalAccount() >= 10000){return new AVip();}else if (customer.getTotalAccount() >= 6000){return new BVip();}else if (customer.getTotalAccount() >= 3000){return new CVip();}else {return new NoVip();}} }

main函數(shù)代碼不變

結(jié)果依然4500.00

其實大家看下來就感覺沒那么多必要的,我直接if else也可以解決的,沒有這么麻煩呀,不對的,簡單的小項目可以這樣,但是如果活動量增加的話,沒必要在controller或者service層去判斷它應(yīng)用那種策略,他其實說白了就是一個處理方式的一個工具類!我們把它封裝好,什么時候用,什么時候調(diào)用就好,就像jdk中的時間,其實我們項目中也會有很多工具類,他其實有點類似那樣!

????

?

轉(zhuǎn)載于:https://my.oschina.net/mdxlcj/blog/1787501

總結(jié)

以上是生活随笔為你收集整理的精通Java设计模式从初见到相爱之工厂+策略模式(3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。