前言在实际开发过程中,往往会有不同行为的实现,比如支付,可能是微信支付、阿里支付、银联等支付的具体实现。你需要用一个设计模式来实现定义策略模式定义了一系列的算法,并对每个算法进行了封装,使得它们可以相互替换,并且算法的改变不会影响到使用该算法的客户UML类图实现InitializingBean接口的算法。说明1.InitializingBean接口提供了bean的初始化方法。它只包括afterPropertiesSet方法。所有继承该接口的类在初始化bean时都会执行该方法。2、spring初始化bean时,如果bean实现了InitializingBean接口,会自动调用afterPropertiesSet方法。3.Spring在初始化bean时,如果bean实现了InitializingBean接口,并在配置文件中指定了init-method,系统会先调用afterPropertieSet()方法,再调用init-method中指定的方法。策略工厂导入java.util.Map;导入java.util.concurrent.ConcurrentHashMap;公共类StrategyFactory{privatestaticfinalMapserviceMap=newConcurrentHashMap<>();publicstaticvoidregister(PayTypeEnumpayTypeEnum,PayServiceservice){serviceMap.put(payTypeEnum.getType(),服务);}publicstaticBooleangetService(StringpayType){PayServicepayService=serviceMap.get(payType);if(payService!=null){返回payService.pay(payType);}返回Boolean.FALSE;}}支付枚举私有字符串类型;privateStringdesc;}具体业务类1.支付入口publicinterfacePayService{Booleanpay(StringpayType);}2.支付入口微信支付逻辑具体实现importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.InitializingBean;导入org.springgframework.stereotype.Service;@Service@Slf4jpublicclassWxPayServiceimplementsPayService,InitializingBean{@OverridepublicvoidafterPropertiesSet()throwsException{StrategyFactory.register(PayTypeEnum.WX,this);}@OverridepublicBooleanpay(StringpayType){log.info("调用微信支付");返回真;}}阿里支付具体逻辑importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.InitializingBean;importorg.springframework.stereotype.Service;@Service@Slf4jpublicclassAliPayServiceimplementsPayService,InitializingBean{@OverridepublicvoidafterPropertiesSet(){StrategyFactory.register(PayTypeEnum.ZFB,this);}@OverridepublicBooleanpay(StringpayType){log.info("呼叫支付宝");返回真;}}3.定义一个controllertestiable;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassPayController{@GetMapping("pay/{type}")publicbooleanpay(@PathVariable("type")字符串类型){StrategyFactory.getService(类型);返回真;}}测试结果测试微信支付:http://localhost:10001/pay/wx测试阿里支付:http://localhost:10001/pay/zfb