今天我们写一个鸭子类,首先分析一下鸭子有哪些特征呢?
鸭子:会叫,会游水,会飞,外观
现在有个需求:分两种鸭子,一种是外观是绿头,一种是红头,写下看:
class Duck:
def quack(self):
print(‘呱呱叫‘)
def swim(self):
print(‘我会游泳‘)
def display(self):pass
def fly(self):
print(‘我会飞‘)
class RedDuck(Duck):
def display(self):
print(‘我是红头‘)
class GreenDuck(Duck):
def display(self):
print(‘我是绿头‘)
似乎利用派生类,我们很容易就解决了这问题,那现在又有个需求来了:区分开会飞的鸭子和不会飞鸭子
你可能会想:这还不简单,在派生类里重写一下飞的方法就可以了
但是这样,对于不会飞的鸭子本来就不应该有fly这个函数,所以这种解决方式有些不妥!
似乎我们在定义基类时就有些误区,不应该就把某些方法定死了
策略模式:

代码实现:
class FlyBehavior:
‘‘‘Interface class:FlyBehavior‘‘‘
def fly(self):pass
class Flywithwing(FlyBehavior):
def fly(self):
print(‘I can fly‘)
class Flynoway(FlyBehavior):
def fly(self):
print(‘I can not fly‘)
class Duck:
def __init__(self,flyParam):
self.fly_behavior = flyParam
def performFly(self):
self.fly_behavior.fly()
def swim(self):
print(‘我会游水‘)
def display(self):pass
class RedDuck(Duck):
def __init__(self,flyParam=Flynoway()):
Duck.__init__(self,flyParam)
def display(self):
print(‘我是红头‘)
class GreenDuck(Duck):
def __init__(self,flyParam=Flywithwing()):
Duck.__init__(self,flyParam)
def display(self):
print(‘我是绿头‘)
g_duck = GreenDuck()
g_duck.performFly()
g_duck.display()
g_duck.swim()
r_duck = RedDuck()
r_duck.performFly()
r_duck.display()
r_duck.swim()
欢迎大家对我的博客内容提出质疑和提问!谢谢
笔者:拍省先生
原文:http://www.cnblogs.com/xinsiwei18/p/5697503.html