策略模式 Strategy
定義一個演算法家族,家族成員會實作相同的介面,更換演算法只需要換掉成員就好.
例如:
假設我們在設計購物網站的時候,結帳時依照不同等級的會員可以享有不同的折扣:
金卡會員 => 折扣率最高
銀卡會員 => 折扣率中
一般會員 => 折扣率低
這個系統的UML如下圖
三個會員的類別會實現discount的介面,而這三個discount的介面的計算方法都會不一樣
class GoldenMember{
def discount(self){
return self.total_count * 0.5;
}
}
class SilverMember{
def discount(self){
return self.total_count * 0.7;
}
}
class NormalMember{
def discount(self){
return self.total_count * 0.9;
}
}
最後我們的結帳主程式只需要去呼叫會員類別的discount就可以得到最後的價格
class main{
def __init__(self, member):
self.member = member
def check(self){
return self.member.discount()
}
}
透過策略模式,未來我們要新增一種會員,只需要再新增一個新的類別就可以達成.