策略模式
把一系列算法封装起来,使得他们可相互替换,是的算法可独立与他的客户端而变化
from abc import ABCMeta,abstractmethod
#抽象策略
class Stretrgy(object):
__metaclass__ = ABCMeta
def excute(self, data):
pass
#----------------具体策略----------------
class FirstStretrgy(Stretrgy):
def excute(self, data):
print "执行快速策略%s" %data
class SlowStretrgy(Stretrgy):
def excute(self, data):
print "执行慢速策略%s" % data
#----------------具体策略----------------
#上下文 把策略对象和数据对象封装起来
class Context(object):
def __init__(self,data, stretrgy):
self.stretrgy = stretrgy
self.data = data
def do_stretrgy(self):
self.stretrgy.excute(self.data)
def set_stretrgy(self, stretrgy):
self.stretrgy = stretrgy #更换策略
#client
data = "11111"
st = FirstStretrgy()
c = Context(data,st)
c.do_stretrgy()
st_2 = SlowStretrgy()
c.set_stretrgy(st_2)
c.do_stretrgy()
优点:
- 消除了一些条件语句
缺点 - 客户需要了解策略