策略模式python实现
class Duck(metaclass=abc.ABCMeta):
def __init__(self):
self.flyBehavior=FlyBehavior()
self.quackBehavior=QuackBehavior()
@abc.abstractmethod
def display(self):
pass
def performFly(self):
self.flyBehavior.fly()
def performQuack(self):
self.quackBehavior.quack()
class FlyBehavior(metaclass=abc.ABCMeta):
@abc.abstractmethod
def fly(self):
print('f')
class FlyWithWings (FlyBehavior):
def fly(self):
print('I"m flying')
class FlyNoWay(FlyBehavior):
def fly(self):
print("I can't fly")
class QuackBehavior(metaclass=abc.ABCMeta):
@abc.abstractmethod
def quack(self):
print('f')
class Quack (QuackBehavior):
def quack(self):
print("Quack")
class MuteQuack (QuackBehavior):
def quack(self):
print("<<silence>>")
class MallardDuck(Duck):
def __init__(self):
self.flyBehavior = FlyWithWings()
self.quackBehavior = Quack()
def display(self):
print("I'am a real Mallard duck")
if __name__ == '__main__':
mal = MallardDuck()
mal.performQuack()
mal.performFly()