前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >策略模式(Strategy)

策略模式(Strategy)

作者头像
Java高级架构
发布2018-07-20 15:54:09
3530
发布2018-07-20 15:54:09
举报
文章被收录于专栏:JAVA高级架构JAVA高级架构

1. 模式的定义

假设现在要实现一个简化的报价管理,实现如下的功能: 1. 对于普通客户或者新客户报全价 2. 对于老客户报的价格,统一折扣5% 3. 对于大客户报的价格,统一折扣10% 对不同的人员报不同的价格

到底该如何实现,才能够让价格类中的计算报价的算法,能很容易地实现可维护,可扩展,又能动态地切换变化呢?

策略模式的定义: 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,使得算法可独立于使用它的客户而变化

2. UML图

Strategy:策略接口,用来约束一系列具体的策略算法,Context使用这个接口来调用具体的策略实现定义的算法

ConcreteStrategy:具体的策略实现,也就是具体的算法实现

Context:上下文,负责和具体的策略类交互,通常会持有一个真正的策略实现

代码:

3. 研磨设计模式

1)策略模式的功能:把具体的算法实现从具体业务处理中独立出来,把它们实现成为单独的算法类,从而形成一系列的算法,并让这些算法可以相互替换

2)Context和Strategy的关系 策略实现对象也可以从上下文获取所需要的数据,可以将上下文当作参数传递给策略实现对象。

3) 容错恢复机制 比如说采用策略模式,把日志记录到数据库和把日志记录到文件当做两种记录日志的策略,然后再运行期间根据需要进行动态的切换

4)策略模式结合模板方法模式 发现一系列的算法的实现上存在公共功能,只是在某些局部步骤上有所不同。

5)策略模式的本质:分离算法,选择实现

文章自:https://blog.csdn.net/jiangxishidayuan/article/details/51967015

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高级架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 模式的定义
  • 2. UML图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档