大家好,如果您还对switchcase不太了解,没有关系,今天就由本站为大家分享switchcase的知识,包括switchcase开关matlab的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
一、业务场景一个接口需要根据前段传入的资产类型(assetType),调用不同的业务类中的资产明细方法(dealList),最初的做法就是最常见的switchcase或者if/else调用不同的service。相信每个程序员看到代码中大段的判断逻辑代码都会很头疼,刚好之前看过《重构既有代码》这本Java届的经典书,里面就明确指出switchcase违反开闭原则,可以用策略模式改写。
二、实现逻辑1.定义统一资产接口,每种资产实现此接口,代码如下:
publicinterfaceAssetService{
IntegerassetType();
DealListResponsequeryDealList(IntegerassetId,Integerstatus,IntegersinceId,Integercount);
}
2.资产service实现接口,并重写assetType()和queryDealList()方法,代码如下:
@Service
publicclassCashServiceimplementsAssetService{
@Autowired
privateCashDetailServicecashDetailService;
@Override
publicIntegerassetType(){
returnAssetType.CASH.getId();
}
@Override
publicDealListResponsequeryDealList(IntegerassetId,Integerstatus,IntegersinceId,Integercount){
}
3.统一分发路由类,根据assetType调用对应的service,代码如下:
@Service
publicclassAssetServiceRoute{
@Resource
privateAssetService[]assetServices;
publicAssetServiceroute(IntegerassetType){
for(AssetServiceassetService:assetServices){
if(Objects.equals(assetType,assetService.assetType())){
returnassetService;
}
}
thrownewBusinessRuntimeException(GiveErrorCode.CHECK_PARAM_FAILED);
}
}
4.调用,代码如下;
publicDealListResponsedealList(IntegerassetType,IntegerassetId,Integerstatus,IntegersinceId,Integercount){
AssetServiceassetService=assetServiceRoute.route(assetType);
if(assetService==null){
thrownewBusinessRuntimeException(GiveErrorCode.INVALID_PARAMS);
}
returnassetService.queryDealList(assetId,status,sinceId,count);
}
三、代码分析意图:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使用if…else所带来的复杂和难以维护(违反开闭原则)。
何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。
如何解决:将这些算法封装成一个一个的类,任意地替换。
关键代码:实现同一个接口。
switchcase和switchcase开关matlab的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!
本文由欣欣吧手游攻略栏目发布,感谢您对欣欣吧的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“switchcase?switchcase开关matlab”