学习
,书中是用java 来实现,我用python比较多,所以在这里记下 用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();