干什么:给定一堆算法中,能够在运行时选择某一算法.
在运行时根据条件变化策略.
# encoding: utf-8
# 在执行的时候,能够根据子类的类型去执行子类当中的方法
# 继承情形中,所继承的方法在子类中实现,如果在父类实现,相当于多余,因此出现了抽象类
# 抽象类:部分,有未实现的抽象方法,但是非抽象方法依旧实现了功能。
# 接口类:完全未实现方法体,只有抽象方法的抽象类
class Animals(object):
def __init__(self):
pass
def say(self):
pass
class Dog(Animals):
def __init__(self, name):
self.name = name
def say(self):
print("%s 在叫汪汪" % self.name)
class Cat(Animals):
def __init__(self, name):
self.name = name
def say(self):
print("%s 在叫喵喵" % self.name)
class Context(object):
_strategy = None
def __init__(self, strategy):
self._strategy = strategy
def execute_strategy(self):
self._strategy.say()
if __name__ == "__main__":
cat = Cat("猫猫")
dog = Dog("阿财")
context = Context(cat)
context.execute_strategy()
猫猫 在叫喵喵
2,利用python中的函数式编程思想
将函数传递给方法参数也是实现的一种形式
类似与c语言中的函数指针.
class Operation(object):
_strategy = None
def __init__(self):
pass
def set_stategy(self, strategy):
self._strategy = strategy
def excute_strategy(self, num1, num2):
if self._strategy:
self._strategy(num1, num2)
def add(num1, num2):
print(num1 + num2)
def sub(num1, num2):
print(num1 - num2)
def muti(num1, num2):
print(num1 * num2)
if __name__ == "__main__":
op = Operation()
op.set_stategy(add)
op.excute_strategy(1, 2)
op.set_stategy(muti)
op.excute_strategy(8, 9)
3
72