一、什么是策略模式
策略模式定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。
二、策略模式的结构

策略层为context定义了一系列的可供重用的算法或行为
在基本的策略模式中,选择所用具体实现的职责由客户端对象承担,并转给策略模式的Context对象
三、策略模式的实例
定义一个所有支持的算法的公共接口
class Operation:
def operation(self, number_a, number_b):
pass
|
定义具体的算法,继承公共的接口
class OperationAdd(Operation):
"""加算法"""
def operation(self, number_a, number_b):
return number_a + number_b
class OperationSub(Operation):
"""减算法"""
def operation(self, number_a, number_b):
return number_a - number_b
class OperationMul(Operation):
"""乘算法"""
def operation(self, number_a, number_b):
return number_a * number_b
class OperationDiv(Operation):
"""除算法"""
def operation(self, number_a, number_b):
if number_b == 0:
return "分母不能为0!"
else:
return number_a / number_b
|
建一个context文件,可以结合简单工厂模式,维护对Operation类的引用
class context:
def __init__(self, operator):
if operator == '+':
self.__ope = OperationAdd()
if operator == '-':
self.__ope = OperationSub()
if operator == '/':
self.__ope = OperationDiv()
if operator == '*':
self.__ope = OperationMul()
def execute_operation(self, number_a, number_b):
return self.__ope.operation(number_a, number_b)
|
最后调用context
if __name__ == '__main__':
context0 = context("+")
print(context0.execute_operation(5, 6))
context1 = context("-")
print(context1.execute_operation(5, 6))
context2 = context("/")
print(context2.execute_operation(5, 0))
context3 = context("*")
print(context3.execute_operation(5, 6))
|
|
以下为复制内容: 1. 何时使用
2. 方法
3. 优点
4. 缺点
5. 使用场景
6. 应用实例
7. 注意事项
|
浙公网安备 33010602011771号