學習<head first>,書中是用java 來實現,我用python比較多,因此在這裏記下 用python實現的方法 。 java
書中策略模式的定義 : python
策略模式 : 策略模式定義了算法族,分別封裝起來,讓它們之間能夠互相替換,此模式讓算法的變化獨立於使用算法的客戶。我我的的理解 :
python 實現代碼: 算法
#接口 #FlyBehavior.py class FlyBehavior(object): #定義策略的接口 def __init__(self): super(FlyBehavior,self).__init__() #飛行策略 def fly(self): pass #叫的策略 def quack(self): pass #實現接口,會飛與不會飛的具體行爲 #FlyWithWings.py 會飛的鴨子 from FlyBehavior import * class FlyWithWings(FlyBehavior): def __init__(self): super(FlyWithWings,self).__init__() #實現具體如何飛行的行爲 def fly(self): print("I'm flying!") #FlyNoWay.py 不會飛的鴨子 from FlyBehavior import * class FlyNoWay(FlyBehavior): def __init__(self): super(FlyNoWay,self).__init__() def fly(self): print("I can't fly!") #鴨子的模型: #Duck.py class Duck(object): def __init__(self): super(Duck,self).__init__() def display(): pass #執行最終的策略 def performFly(self): print ("I'm a Duck") self.flyBehavior.fly() #策略接收器,這個方法最重要,根據發送過來的策略對象動態決定執行的策略 def setFlyBehavior(self,behavior): self.flyBehavior = behavior #實現具體的鴨子 #MallardDuck.py from Duck import * from FlyWithWings import * class MallardDuck(Duck): def __init__(self): super(MallardDuck,self).__init__() self.setFlyBehavior(FlyWithWings()) #發送策略,告訴最終執行器我是一隻會飛的鴨子 def display(): print("I'm a real Mallard duck !") #讓鴨子飛一下子 main.py from MallardDuck import * from FlyWithWings import * if __name__ == '__main__': duck = MallardDuck(); duck.performFly();