策略模式 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()
    }
}

透過策略模式,未來我們要新增一種會員,只需要再新增一個新的類別就可以達成.