首先创建一个工厂,用于放置不同的策略,可以根据不同的需求拿出不同的实现
service的名称将会在启动的时候交给spring进行管理
@Component
public class ActivitySettingFactory {
@Resource
private Map<String, ActivitySettingStrategy> activitySettingstrategyMap;
public ActivitySettingStrategy getSettingStrategy(String activityType) {
activityType = activityType + "_setting";
if (activitySettingstrategyMap.get(activityType) == null) {
throw new ServiceException(ApiResponseCodeEnum.FAIL, "活动类型错误");
}
return activitySettingstrategyMap.get(activityType);
}
}
定义一个策略接口,调用此接口,通过传入不同的service的名字,进行不同service的调用
public interface ActivitySettingStrategy {
/**
* 获取配置类
* @param activityType
* @return
*/
Object getActivitySetting(String activityType);
}
创建两个策略,分别实现这个策略接口,通过从map里面获取的service的名称进行不同service(策略)的调用。
通过这个工厂类获取注册到spring中service的实现,实现的名称如下 :
receive_setting
turntable_setting
@Service("turntable_setting")
public class TurntableSettingStrategy implements ActivitySettingStrategy {
@Autowired
private ActivitySettingTemplateDao activitySettingTemplateDao;
@Autowired
private JsonUtils jsonUtils;
@Override
public Object getActivitySetting(String activityType) {
System.out.println("turntable-activityType = " + activityType);
ActivitySettingTemplateDO activitySettingTemplateDO = activitySettingTemplateDao.getByType(activityType);
String activityConfig = activitySettingTemplateDO.getActivityConfig();
ActivityTurntableConfigDTO activityTurntableConfigDTO = jsonUtils.json2Bean(activityConfig, ActivityTurntableConfigDTO.class);
return activityTurntableConfigDTO;
}
}
@Service("receive_setting")
public class ReceiveSettingStrategyImpl implements ActivitySettingStrategy {
@Autowired
private ActivitySettingTemplateDao activitySettingTemplateDao;
@Autowired
private JsonUtils jsonUtils;
@Override
public Object getActivitySetting(String activityType) {
System.out.println("receive-activityType = " + activityType);
ActivitySettingTemplateDO activitySettingTemplateDO = activitySettingTemplateDao.getByType(activityType);
String activityConfig = activitySettingTemplateDO.getActivityConfig();
ActivityReceiveConfigDTO activityReceiveConfigDTO = jsonUtils.json2Bean(activityConfig, ActivityReceiveConfigDTO.class);
return activityReceiveConfigDTO;
}
}
调用:
@Override
public List<ActivitySettingTemplateVO> getSettingTemplate(String itemCode) {
ActivitySettingDO activitySettingDO = activitySettingService.getActivityByCode(itemCode);
//通过工厂类拿出调用的service
ActivitySettingStrategy settingStrategy = activitySettingFactory.getSettingStrategy(activitySettingDO.getActicityType());
//不同的service相当于不同的策略,进行不同的实现
Object activitySetting = settingStrategy.getActivitySetting(activitySettingDO.getActicityType());
//实现自己的代码逻辑。。。
}