策略模式自动获取不同实现类进行功能执行

1、添加@Component,交给spring管理
2、实现ApplicationContextAware
3、setApplicationContext获取所有实现类,注入到map中

@Component
public class StrategyContext  implements ApplicationContextAware
{

    Map<String, ISignatureStrategy > map = new HashMap<>();
    
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    
        map = applicationContext.getBeansOfType(ISignatureStrategy .class);
        
    }

    //获取策略实例
    public ISignatureStrategy getPayStrategy(String platform) {
    
		return map.get(platform + "SignatureStrategy");
		
	}
}

注意:
applicationContext.getBeansOfType(IStrategy.class) 获取IStrategy所有实现类,之后添加新的实现类,不需要做额外的代码增加

4、策略类定义

public interface ISignatureStrategy {

    # 设置成 default 方法,子类可有选择的实现方法
	default String getPersonAuth() {
		return "父类第一个方法";
	}

	# 入参、出参设置成Object,子类可按需设置参数
	default Object getPersonAuthResp(Object o) {
		return null;
	}
}


5、适配器定义

@Component
public class EqianbaoSignatureAdapter {

	/**
	 * 获取个人认证dto
	 * @return
	 */
	@Bean
	public EPersonAuthDTO getPersonAuth(PersonAuthVO personAuthVO) {

		EPersonAuthDTO ePersonAuthDTO = new EPersonAuthDTO();
		ePersonAuthDTO.setEName(personAuthVO.getName());

		return ePersonAuthDTO;
	}
}

6、策略类实现

@Component
public class EqianbaoSignatureStrategy implements ISignatureStrategy {

	private final EqianbaoSignatureAdapter eqianbaoSignatureAdapter = new EqianbaoSignatureAdapter();

	@Override
	public String getPersonAuth() {
		return "获取个人认证";
	}

	# 入参需要将Object向下转型,出参可直接输出
	@Override
	public Object getPersonAuthResp(Object object) {

		PersonAuthVO personAuthVO = (PersonAuthVO) object;

		return eqianbaoSignatureAdapter.getPersonAuth(personAuthVO);
	}
}

7、控制层进行调用

	private final StrategyContext strategyContext;

	@Override
	public Object getPersonAuthResp(PersonAuthVO personAuthVO) {

		ISignatureStrategy payStrategy = strategyContext.getPayStrategy(personAuthVO.getPlatform());

		return payStrategy.getPersonAuthResp(personAuthVO);
	}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值