使用策略模式+工厂模式对接口进行分配处理。远离if else

使用策略模式+工厂模式对接口进行分配处理。远离if else

背景:在项目中我们会遇到不同时间或者不同条件下,调用不同的方法或处理方式。因此我们可以采用策略模式进行满足不同的对象执行不同的具体行为。再用工厂模式进行匹配对应的对象。

首先我们做一下功课温习一下策略模式和工厂模式

 

好的补充的知识已经补充好了我们来干了。

 

1.定义一个统一接口:NewOrOldMethodService

 

/**
 * 新旧方法选择的接口
 * 使用策略模式+工厂模式进行处理
 * 有助于后面接口新老接口替换和维护,远离可恶的if else
 *  @author 鼠飞文
 * @date 2020-04-07
 */
public interface NewOrOldMethodService {

    /**
     *  使用default 是为了反正有的接口方法没有新老接口,接口实现者不用必须实现这个接口方法
     * 获取数据
     * @return
     */
       default String findExceptionList(String param) {
        return null;
    };
}

2.创建一个类ExceptionOldServiceImpl实现NewOrOldMethodService接口

 

@Service
@Slf4j
public class ExceptionOldServiceImpl implements NewOrOldMethodService {


    /**
     * 这里是老接口实现方法
     *
     */
    @Override
    public String findExceptionList(String param) {
       
        return "这里是老接口实现方法";
    }

}

3.创建一个类ExceptionNewServiceImpl实现NewOrOldMethodService接口

@Service
@Slf4j
public class ExceptionNewServiceImpl implements NewOrOldMethodService {


    /**
     * 这里是新接口实现方法
     *
     */
    @Override
    public String findExceptionList(String param) {
       
        return "这里是新接口实现方法";
    }

}

 

4.先创建一个bean类似于工厂模式:NewOrOldMethodFactoryService

 

/**
 *  工厂模式
 *  @date 2020-04-07
 */
@Component
public class NewOrOldMethodFactoryService {

    /**
     * 新的接口
     */
    @Autowired
    private   ExceptionNewServiceImpl exceptionNewServiceImpl;

    /**
     * 老的接口
     */
    @Autowired
    private  ExceptionOldServiceImpl exceptionOldServiceImpl;

    /**
     * 接口表
      */
    public static final Map<Boolean, NewOrOldMethodService> map = new HashMap<>();

    /**
     * 在benan注入的时候
     * 接口注册
     */
    @PostConstruct
    public void init() {
        map.put(true,exceptionNewServiceImpl);
        map.put(false, exceptionOldServiceImpl);
    }

    /**
     * 获取对应的接口
     * @param medalType
     * @return
     */
    public  NewOrOldMethodService getService(boolean medalType) {
        return map.get(medalType);
    }
}

 

5.调用者只需要调用工厂类接口实现接口的半自动匹配

 

@Service
public class WmsExceptionServiceImpl implements WmsExceptionService {

   @Autowired
    private NewOrOldMethodFactoryService newOrOldMethodFactoryService;


      /**
     * 通过设置ture就可以自动分配到新的接口中
     * @param param 参数
     * @return
     */
   @Override
    public String findNewExceptionList(String param) {
     return  newOrOldMethodFactoryService.getService(true).findExceptionList(param);
    }



}

 

 

好了上面的案例已经写完了,如果有缺陷可以来踢

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值