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

策略模式的实践

原创
作者头像
Kokomo
发布2023-11-15 17:13:09
1130
发布2023-11-15 17:13:09
举报
文章被收录于专栏:灵墨AI探索室灵墨AI探索室

前言

在我们实际的开发过程中,实现功能当然是首要目标,但在实现功能的基础上,也要考虑到代码的健壮性和扩展性。健壮性保证了代码运行的质量,扩展性则保证了后续维护的便捷,降低了功能的维护成本。通常实现扩展性的手段就是利用设计模式,将变动的代码抽出,使其能够独立变化而不影响其他部分的代码。其中,策略模式是一种常用的设计模式,本次笔者就带大家了解一下,并结合一个案例,向大家说明如何具体的使用

策略模式

设计模式最初是由GOF(四人帮,全拼 Gang of Four)率先提出的一种思想,主要分为创建型模式,行为型模式,结构型模式三大类。策略模式属于其中的行为型模式,行为型模式的特点主要关注对象之间的通信和交互,旨在解决对象之间的责任分配和算法的封装。

在策略模式中,主要存在三种角色

  • 环境角色(Context):持有一个策略类的引用,提供给客户端使用。
  • 抽象策略角色(Strategy):这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
  • 具体策略角色(ConcreteStrategy):包装了相关的算法或行为。

上面这张图就表示了这种关系,策略类在定义了具体的规则及对应的类

客户端通过引用在策略类中找到对应的实现类,由实现类完成对应的动作。大家可以将引用理解为去医院看病的病人,策略类是导诊台,实现类则是具体的科室,病人去医院通过导诊台了解到自己应该去哪个科室,然后在对应的科室里看病

Excel处理中心

在上文中大家已经了解了策略模式大概的思想,在本章中我们举一个具体的例子来为大家演示,在各类系统中,一定绕不开Excel的导入导出,比较数据维护的终点就是导数据(haha),各种Excel处理的场景有很大的共同点,在导入时,都是将excel中的数据转换为对象,对这些对象进行一些处理,或是校验,或是填充,或是转换,然后存入db,失败的记录单独记录。导出的场景则是根据一些参数查询DB中的数据,然后组合,拼装,生成文件,提供给用户。其实在一个系统中完全可以利用策略模式,减少重复的代码及接口,提供一套统一的接口给前端,每次新增一种场景,后端只需关注核心的业务逻辑就可以了。

代码语言:java
复制
interface ExcelCommonService{
  enum getType();
  
  void importExecl();
  
  void exportExcel();

  void exportTemplate();
  
}

在这个类中定义了几个方法,getType()是用来区分各个不同的场景的,importExecl()是用来实现导入逻辑的,exportTemplate()是用来实现导出模版的,exportExcel()是用来实现导出excel的

各个业务场景只需要在对应的实现类下实现自己的逻辑,此外再向前端提供一套通用的接口,通过type进行对应的处理,这样便能降低很多工作量,当然,这里举得只是一个简单的例子,还可以在此上进行扩充,比如新增一张表,每次有导入或导出都记入表中,这样便能记录每次导入导出的相关信息,将每次的操作持久化记录下来,还可以利用定时任务,针对不同的情况分批处理,异步调用、延迟调用,降低系统在峰值时的压力。

结尾

虽然策略模式有很多好处,但在使用时也需要结合具体的业务场景进行考虑,不然在定义完对应的策略类后,效果不加,反而会成为开发的负担。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 策略模式
  • Excel处理中心
  • 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档