定义
策略模式定义了算法簇,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
优点
多用组合少用继承,使用组合建立的系统具有很大的弹性,不仅可以将算法封装成类,更可以在运行时动态的改变行为。策略模式就是践行这个准则的例子。通过将行为或者算法实现为接口,在类中使用接口而不用关心具体的具体的实现从而使模块代码解耦。
类图
python代码实现
from abc import abstractmethod
class FlyBehavior:
@abstractmethod
def fly(self):
pass
class FlyWithWing(FlyBehavior):
def fly(self):
print("FlyWithWing")
class FlyNoway(FlyBehavior):
def fly(self):
print("FlyNoway")
class QuackBehavior:
@abstractmethod
def quack(self):
pass
class Quack(QuackBehavior):
def quack(self):
print("Quack")
class MuteQuack(QuackBehavior):
def quack(self):
print("<<Silence>>")
class Squeak(QuackBehavior):
def quack(self):
print("Squeak")
class Duck:
def __init__(self,fly,quack):
self.flyBehavior = fly
self.quack = quack
def performFly(self):
self.flyBehavior.fly(self.flyBehavior)
def performQuack(self):
self.quack.quack(self.quack)
def setfly(self, fly):
self.flyBehavior = fly
def setquack(self, quack):
self.quack = quack
duck = Duck(FlyWithWing,Squeak)
duck.performFly()
duck.performQuack()
print("===================================")
duck.setfly(FlyNoway)
duck.setquack(MuteQuack)
duck.performFly()
duck.performQuack()