更好的實現開閉原則(ocp, openclosedprinciple),即對於擴充套件是開放的,對於修改是關閉的,不修改原有**,只擴充套件**。
策略模式包括三個角色:
-context(環境類):使用演算法策略,維持乙個抽象策略類的引用例項;
-strategy(抽象策略類):將所有的策略抽象出來,在該類宣告抽象方法或者介面,是所有策略的父類;
-concretestrategy(具體策略類):實現了抽象策略類的方法;
以下舉個簡單例子,場景是**當中不同的客戶享受的商品的折扣不同:
1.strategy(抽象策略類):
public
abstract
class
countstrategy
2.concretestrategy(具體策略類)
(1)策略1:vip的**策略:打8折
public
class
vipcount
extends
countstrategy
}
(2)策略2:超級vip的**策略:打75折
public
class
svipcount
extends
countstrategy
}
3.context(環境類)
public
class context
public
double
getprice(double price)
}
4.客戶端呼叫(測試):
public
class strategytest
}
執行結果:
vip的**是:80.0
超級vip的**是:75.0
最近剛開始看設計模式,以上見解只是個人的一點皮毛看法,若是有什麼不當之處,忘指出!
Java設計模式 行為型 策略模式
在狀態模式下,我們每個人都知道自己會做什麼,應當做什麼,事情本事是固定的,只是根據當前狀態的改變而去選擇不同的事情去做,狀態本身可能會隨著時間的推移不斷的增加或減少。在策略模式下,我們每個人不知道自己會做什麼,應當做什麼,不論什麼事情當需要去做的時候就去完成它,事情本身可能是千變萬化的。生活中的每個...
行為型設計模式之 策略模式
緊接著上面的模板方法設計模式,當使用者支付時,其實使用者是有優惠活動可以享受的,但是每個使用者的具體情況不同,所選擇的優惠活動是不一樣的,有滿減活動 首次購活動 新會員活動,等等一系列優惠。為了避免一系列的if else的書寫,我們使用策略模式進行優化 首先是打折的抽象介面 public inte ...
策略模式(行為型)
思考問題 乙個書店的某類書是免費的,某類書是固定1元的,某類書是按折扣算的 比如88 同一類別的書本 一樣 假定顧客只買一類書,在設計書店bookstore類時應該如何計算顧客買書的費用?解答 1.你有可能不知道如何設計,畢竟上面的計算規則不一樣 並不是一類書8折另一類書9折那樣好計算 2.既然這樣...