第三章 设计模式之策略模式

本文详细介绍了策略模式的概念,如何通过接口、具体策略类和环境类实现算法的灵活切换,以及在Spring MVC中HandlerMapping的策略模式应用实例。策略模式强调扩展性与代码简洁,但可能面临类过多的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

策略模式的定义

策略模式就是有一系列算法,这些算法只是行为上的不同,将这些算法一一封装起来,然后使得他们能够相互替换。

策略模式的关键类

策略接口:定义一个策略接口,起到约束具体策略类的作用,将具体的策略实例赋值给策略接口对象,在环境类中直接调用这个策略接口对象的相关方法,这样在用不同的策略类赋值给策略接口对象后,环境类后面的代码都不需要改动的。

具体的策略类:将具体的算法封装到策略类中,并实现统一的策略接口。

环境类:持有一个策略类的引用,最终给客户端调用。

策略模式的好处:

1.便于扩展,当有新的算法的时候,可以将它封装成一个策略类,替换其他的策略类,环境类中其他代码都不用改动的。

2.避免了if else这种多重判断,if else这种多重判断比较复杂和难以维护

策略模式的坏处:

1.要是算法种类太多的话,可能每一个算法行为都要生成一个新的类,这样的类就会有很多个。

2.要暴露所有的算法行为。

策略模式结构示意图:

 策略模式具体的例子:

我们知道在springmvc中有一个很重要的组件,那就是HandlerMapping,在DispatcherServlet中应用HandlerMapping就可以看成是一个策略模式,HandlerMapping的作用就是通过url找到执行这个请求的类,HandlerMapping有三个具体的实现类:

RequestMappingHandlerMapping:通过url和解读注解找到具体的类

SimpleUrlHandlerMapping:通过url和配置匹配找到具体的类

BeanNameUrlHandlerMapping:通过url和beanName匹配找到具体的类

可以看出这三个HandlerMapping的实现类的作用都是相同的,只是行为模式不一样,而且他们都实现了HandlerMapping接口。DispatcherServlet只是根据IOC容器中注册的具体HandlerMapping对象,将他们选择出来最后对url进行解析,选择不同的HandlerMapping实现类进行解析都不会影响后面的执行流程。当然具体的源码来看,这个策略模式可能不是那么标准,但是策略模式的思想是用到了的。

 这里有一篇更好的文章:https://blog.csdn.net/qq594913801/article/details/89204473?spm=1001.2014.3001.5501

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值