设计模式—策略模式

使用场景

在工作中,根据不通的类型的用户,不停的使用if-else,非常繁琐,程序模块间的耦合程度较大,业务逻辑难以切分,后期维护比较难以拆分

设计模式如何使用

设计模式需要使用到的有:
1.公共接口:用于定义公共的接口
2.公共接口实现:对公共接口的具体实现方式
3.调用接口实现类的环境:具体调用接口的场景执行相应的策略方法实现
4.工厂模式:用于产生不同的策略(可选)

代码如下:

  1. 公共接口:
/**
 * 申请单策略接口
 */
public interface AppFormStrategy {
    /**
     * 申请单导入零件:策略公共接口
     * @param datas
     * @param appFormId
     * @return
     */
    List<String> doImportItems(List<Map<String, Object>> datas, Long appFormId);
  1. 接口实现类
    每个实现类的具体业务是不一样的,比如校验规则

实现类1

@Service("appFormStrategy1")
public class AppFormStrategy1Impl implements AppFormStrategy {

	/**申请单实现方式,
	*/
    public  List<String> doImportItems(List<Map<String, Object>> dataMapList, Long appFormId) {
	    //你的业务代码。。。。。。。
	    //比如校验
	    //导入数据等
        return erroList;
    }

实现类2


@Service("appFormStrategy2")
public class appFormStrategy2Impl implements AppFormStrategy {
  @Override
    public  List<String> doImportItems(List<Map<String, Object>> dataMapList, Long appFormId) {
      
		//你的业务代码。。。。。。。
	    //比如校验
	    //导入数据等
        return erroList;
    }

  1. 策略环境
    加载具体的策略
/**
 * 申请单环境:用于接收不同的申请单
 */
public class AppFormContext{
    AppFormStrategy appFormStrategy;

	/**初始化策略
	* 根据不通的type,从Spring中加载实例
	* 工厂模式,获取相应的策略
	*/
    public AppFormContext(String appFormType) {
        if(StringUtils.equals(appFormType, "type1")){
            appFormStrategy = (AppFormStrategy) SpringContextUtil.getBean("appFormStrategy1");
        }else  if(StringUtils.equals(appFormType, "type2")){
            appFormStrategy = (AppFormStrategy) SpringContextUtil.getBean("appFormStrategy2");
        }
    }

	/** 被外部调用
	*/
    public List<String> doForm(List<Map<String, Object>> datas,Long appFormId){
        return appFormStrategy.doImportItems(datas,appFormId);
    }
}
  1. 外部调用策略模式
  //部分涉及业务隐私场景代码这里就不写了,直接main函数就可以了
  //给环境中传入类型,获取相应的策略
  AppFormContext context = new AppFormContext(appFormType);
  //执行策略
  context.doForm(list,appFormId);

5.总结
以上是自己对策略模式的一些见解,如果有不同的见解,欢迎批评指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值