设计模式-策略模式(Strategy Pattern)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了设计模式-策略模式(Strategy Pattern),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2143字,纯文字阅读大概需要4分钟。
内容图文
最近工作中需要写一个功能跟据不同的条件对数据进行筛选。如果用传统的方式需要写很多的if else 语句,这样会导致后期如果再增加新的条件时需要增加更多的分支,使代码很难维护。
但是使用策略模式就会简便很多。在策略模式(Strategy Pattern)中, 一个Class的行为或算法在运行时可以得到改变。策略模式来自于Behavior Pattern.
在策略模式中的strategy objects代表了不同的策略, 而context object因为它的策略也会有不同的行为。策略class会改变context class在运行时的算法。
下面我会用Python实现一下策略模式。
我会先定义一个Strategy Interface (Operator), 去规定一个行为, 再定义4个Concrete Stratety Classes(Add, Substract, Multiply, Divid)去执行Strategy Interface. 最后定义Context class (Context)去使用这些策略。
# 策略接口
class Operator:
def __init__(self, *args, **kwargs):
self.num1 = args[0]
self.num2 = args[1]
def doOperator(self):
pass
# 具体的策略实现类。 做加法运算
class Add(Operator):
def __init__(self, *args, **kwargs):
super(Add, self).__init__(*args, **kwargs)
def doOperator(self):
return self.num1 + self.num2
# 具体的策略实现类。 做减法运算
class Substract(Operator):
def __init__(self, *args, **kwargs):
super(Substract, self).__init__(*args, **kwargs)
def doOperator(self):
return self.num1 - self.num2
# 具体的策略实现类。 做乘法运算
class Multiply(Operator):
def __init__(self, *args, **kwargs):
super(Multiply, self).__init__(*args, **kwargs)
def doOperator(self):
return self.num1 * self.num2
# 具体的策略实现类。 做除法运算
class Divid(Operator):
def __init__(self, *args, **kwargs):
super(Divid, self).__init__(*args, **kwargs)
def doOperator(self):
try:
return self.num1 / self.num2
except ZeroDivisionError:
print("num2 can not be zero!")
# Context, 使用策略类
class Context:
def __init__(self):
pass
def doOperator(self, operator):
return operator.doOperator()
# Main方法
if __name__ == "__main__":
num1, num2 = 2, 6
add = Add(num1, num2)
substract = Substract(num1, num2)
multiply = Multiply(num1, num2)
divid = Divid(num1, num2)
context = Context()
print("%s + %s = %s" %(num1, num2, context.doOperator(add)))
print("%s - %s = %s" %(num1, num2, context.doOperator(substract)))
print("%s * %s = %s" %(num1, num2, context.doOperator(multiply)))
print("%s / %s = %s" %(num1, num2, context.doOperator(divid)))
=========================================================================================
运行结果如下
2 + 6 = 8
2 - 6 = -4
2 * 6 = 12
2 / 6 = 0.3333333333333333
原文:https://www.cnblogs.com/SadieWangFly/p/14350127.html
内容总结
以上是互联网集市为您收集整理的设计模式-策略模式(Strategy Pattern)全部内容,希望文章能够帮你解决设计模式-策略模式(Strategy Pattern)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。