[代码结构设计]根据不同条件使用不同实现类的业务代码设计

 

场景

此时有一个场景,需要设计一个根据不同的状态和条件采用不同的业务处理方式。

这样大家可能不是太理解。举个例子,现在大街小巷上的商户都采用了聚合支付的支付方式,聚合支付也就是商户柜台前放了一个支持支付宝、微信、京东钱包、银联等等的二维码,用户可以通过任意一款支付APP进行支付。

解决思路

思路①

对每个支付渠道进行定义枚举类型

public enum PayWay {     ALI_PAY,      WECHAT_PAY; }

然后在每个对应的service上定义注解,表示对应哪种支付方式

@Pay(PayWay.ALI_PAY) public class AliPayServiceImpl implements PayService  {}

但是仔细思考后,还是存在一些问题

  1. 如果增加一个支付方式后还需要修改,PayWay这个枚举类型
  2. 在程序中,仍需要根据不同的条件做if else判断PayWay,增加支付方式还是得修改原有的判断逻辑。伪代码如下
if("xxx" == "aliPay"){      } else if("xxx" == "wechatPay"){      } //如果增加支付方式还是得增加else if

思路②

在思路①中存在一些问题,首当其冲的就是if else判断问题。先思考一下这个if else的作用是什么?

答:根据思路①描述,这个if else是用来确定采用哪种支付方式。

我们可以将这块代码抽离出来,让对应的业务实现类实现自己的逻辑实现,然后根据返回值true 或者false决定是否过滤掉这个业务实现类。接口定义如下,SupportBean是封装的一个实体

boolean isSupport(SupportBean supportBean);

然后在各个业务实现类都实现自己的isSupport方法,伪代码如下

@Override public boolean isSupport(SupportBean supportBean) {     if (supportBean.getType() == "xxx"){         return true;     }          return false; }

设计

注:只提供一个架子

接口定义

Service接口定义,一个业务执行方法execute(参数自行添加),一个isSupport方法(返回true或者false


                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信