緊接著上面的模板方法設計模式,當使用者支付時,其實使用者是有優惠活動可以享受的,但是每個使用者的具體情況不同,所選擇的優惠活動是不一樣的,有滿減活動、首次購活動、新會員活動,等等一系列優惠。
為了避免一系列的if ... else的書寫,我們使用策略模式進行優化:
首先是打折的抽象介面:
public inte***ce discount
下面是四種不同的打折策略:
/**
* 滿減
*/public class fulldiscount implements discount
return money;
}}/**
* 假日全免
*/public class holidaydiscount implements discount
return money;
}}/**
* 首次購
*/public class newerdiscount implements discount
return money;
}}/**
* 第二單9折優惠
*/public class seconddiscount implements discount
}
在使用時,只需要將這個折扣物件傳入即可:
shoppingcart cart = new onlineshopping(products);
//注入優惠方案
最終呼叫的是discount的實現類,完成各個策略的最終選擇。
設計模式 行為型 策略模式
更好的實現開閉原則 ocp,openclosedprinciple 即對於擴充套件是開放的,對於修改是關閉的,不修改原有 只擴充套件 策略模式包括三個角色 context 環境類 使用演算法策略,維持乙個抽象策略類的引用例項 strategy 抽象策略類 將所有的策略抽象出來,在該類宣告抽象方法或者...
Java設計模式 行為型 策略模式
在狀態模式下,我們每個人都知道自己會做什麼,應當做什麼,事情本事是固定的,只是根據當前狀態的改變而去選擇不同的事情去做,狀態本身可能會隨著時間的推移不斷的增加或減少。在策略模式下,我們每個人不知道自己會做什麼,應當做什麼,不論什麼事情當需要去做的時候就去完成它,事情本身可能是千變萬化的。生活中的每個...
策略模式(行為型)
思考問題 乙個書店的某類書是免費的,某類書是固定1元的,某類書是按折扣算的 比如88 同一類別的書本 一樣 假定顧客只買一類書,在設計書店bookstore類時應該如何計算顧客買書的費用?解答 1.你有可能不知道如何設計,畢竟上面的計算規則不一樣 並不是一類書8折另一類書9折那樣好計算 2.既然這樣...