学习<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();