《 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();                                                                                
相关文章
相关标签/搜索