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