使用策略模式来解决if-else的问题:
对于策略模式的使用场景:
在最近写代码的时候遇见了一个这样的业务问题,就是根据一卡通的状态去展示一卡通的一些个人卡片信息,有这么几种状态:申请状态、补办挂失、延期管理、清退申请这么几种状态,对于这么样的业务我们通常一个接口定义就可以解决这样的问题,只需要给每一种状态赋予特定的id表示即可通过一个接口做到,如下:
public List<cardInfo> getCardInfoList(String status)
{
cardInfoService.getCardInfoList(status);
}
怎样提高代码的高扩展可用性?
现在又来了一个这样的不是需求的需求就是:
1对于卡片状态是申请状态的给我按照卡片的新建时间排序
2对于清退申请的卡片给我按照性别分类
对于上面这样的不成文的的需求,我们在一个接口的service层就需要做这样的if-else判断处理来满足我们的业务需求
public List<cardInfo> getCardInfoList(String status) {
if (status == 0) {
//做对应状态是0的业务处理
} else if (status == 1) {
//做状态对应是1的业务处理
} else if(){
....................
}
}
对于这样的业务在一个方法里面处理,代码的耦合度很高,虽然也能够实现功能,单对于后期功能的扩展不符合程序设计的开闭原则,即对修改关闭,对扩展开放,所以上面这种程序的设计显然很low。
下面我来介绍下采用策略模式解决上面多个else-if的问题:
策略模式
1首先策略模式,我们需要建立一个接口或者抽象类
public interface CardInfoService {
/**
* 查询对应状态的卡片信息列表
*
* @param status
* @return
*/
List<CardInfo> getCardInfoList(String status);
}
2根据不同的策略去实现自己的具体业务
@Service
public class applyCardInfoSeviceImpl implements CardInfoService {
@Override
public List<CardInfo> getCardInfoList(String status) {
return null;
}
}
这样不同的业务放到自己各自的service中去处理,这样解决了程序设计上的开闭原则