科技资讯

[设计模式]策略模式在Java工程中应用

发布日期:2023-07-06    点击次数:132

在之前的文章中,曾经给大家介绍过策略模式:[设计模式]策略模式,在该篇文章中,我们曾很清楚的说到,策略模式主要解决的问题是:在有多种算法相似的情况下,解决使用if...else所带来的复杂和难以维护。策略模式使我们的实现更加符合开闭原则:面向扩展开发,面向修改关闭。在后来的学习和工作的多次应用中,有了更加深刻的认识。再次总结此篇文章赘述下。

此篇文章,将以创建订单为例,创建不同类型的订单,不同类型的订单不同的处理逻辑

类图:

代码:

抽象策略(Strategy)角色:抽象策略角色由抽象类或接口来承担,它给出具体策略角色需要实现的接口;

packagestrategyTest;importstrategyTest.dto.BaseRequestDTO;/***类名称:CreateStrategy*类描述:策略抽象类*创建时间:2023/2/203:46下午*创建人:admin*/publicabstractclassAbstractOrderStrategy{publicabstractBooleanisPracticable(BaseRequestDTOdto);//业务执行总流程publicResponseResultprocess(BaseRequestDTOdto){ResponseResultparamsValidate=validateParams(dto);if(!paramsValidate.isSuccess){returnparamsValidate;}ResponseResultruleValidate=validateRules(dto);if(!ruleValidate.isSuccess){returnruleValidate;}ResponseResultprocessResult=doProcess(dto);if(processResult.isSuccess){postProcessAction(dto);}returnprocessResult;}//参数校验protectedabstractResponseResultvalidateParams(BaseRequestDTOdto);//业务规则校验protectedabstractResponseResultvalidateRules(BaseRequestDTOdto);//核心实现protectedabstractResponseResultdoProcess(BaseRequestDTOdto);//后置处理(异步操作等)protectedabstractvoidpostProcessAction(BaseRequestDTOdto);}

2.具体策略(ConcreteStrategy)角色:实现封装了具体的算法或行为;

顺风车类型处理:

1.packagestrategyTest.impl;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.stereotype.Service;importstrategyTest.AbstractOrderStrategy;importstrategyTest.ResponseResult;importstrategyTest.dto.BaseRequestDTO;importstrategyTest.dto.SfcRequestDTO;/***类名称:SfcImpl*类描述:TODO*创建时间:2023/2/203:58下午*创建人:admin*/@ServicepublicclassSfcImplextendsAbstractOrderStrategy{privateLoggerlogger=LoggerFactory.getLogger(SfcImpl.class);@OverridepublicBooleanisPracticable(BaseRequestDTOdto){if(dto.getType==1){returntrue;}returnfalse;}@OverrideprotectedResponseResultvalidateParams(BaseRequestDTOdto){SfcRequestDTOsfcRequestDTO=(SfcRequestDTO)dto;if(sfcRequestDTO.getIsShare==null

上一篇:推动网络问诊健康规范发展
下一篇:Java基础知识面试题4