逐浪专栏 | 历史潘老师跨界讲设计模式:策略模式
发布于 2021-01-20 14:51
以史为鉴,可以知兴替;
以史为鉴,可以明设计。
万古江河尽成空,大浪淘沙现英雄!
指点江山胡不可?何言无用是书生。
模式定义
策略模式(Strategy Pattern),是一种比较简单的模式,即定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。策略模式使得算法不影响到使用者的情况下发生变化。在进行Spring MVC框架开发过程,Controller、Service、ServiceImpl之间的关系就是策略模式的一种应用。
策略模式涉及3种角色:
环境(Context)角色:
也叫上下文角色,起到承上启下的封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化,故而持有一个Strategy的引用;
抽象策略(Strategy)角色:
这是一个抽象角色,通常由一个接口和抽象类实现。此角色给出的所有的具体策略所需的接口;
具体策略类(ConcreteStrategy):
包装了具体的算法或行为。
历史典故
扬长避短
优点:
1、策略模式提供了管理相关的算法族的办法,策略类的等级结构定义了一个算法或者行为族。
2、策略模式利用组合、委托等技术思想,避免使用多重条件(if-else)语句,多重条件语句不宜维护;
3、策略模式中的代码可以多处复用(会用火攻的未必是诸葛亮,还有可能是西天路上的红孩儿);
缺点:
1、客户端必需知道所有的策略类,并自行决定使用哪一个策略类(臭皮匠常有,而诸葛亮不常有);
2、策略模式把每个具体的策略都封装成类,如果具体的策略很多的话,那么需要维护很多的对象类;
代码意思一下
抽象策略角色,在Java中以接口表示(用抽象类表示也可)
具体的策略角色:借东风
具体的策略角色:空城计
具体的策略角色:火攻
环境角色,即上下文角色:诸葛亮,持有策略的引用。
策略模式的使用:
运行结果:
作者介绍
潘红双,任职于北银金融科技有限责任公司互联网应用开发部。开放银行领域架构专家,交易监控反欺诈领域架构专家,精通Java技术栈开发及性能调优,大型项目开发、运维管理经验。
招聘启事
北银金融科技有限责任公司根植于北京银行,是一家致力于大数据、人工智能、云计算、区块链、物联网等新技术创新与金融科技应用的科技企业,公司充分发挥北京银行企业文化和技术积淀先天优势,通过对技术、场景、生态的完美融合,输出科技创新产品和技术服务。
现诚邀优秀人才加盟,
共享金融科技时代硕果
期待您的加入
本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。
相关素材