《 Head First 》學習筆記:策略模式 (python實現)

學習<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();                                                                                
相關文章
相關標籤/搜索