java 实现策略设计模式


@Component
public class DpReportServiceFactory {

    @Autowired
    private DpReportDataServiceGovImpl dpReportDataServiceGov;

    /**
     * 根据requestType判断类型,实例化并返回对应对象
     *
     * @param requestType
     * @return
     */
    public DpReportDataService createService(String requestType) {
        DpReportDataService service = null;
        if ("gov".equals(requestType)) {
            service = dpReportDataServiceGov;
        }  
        return service;
    }

}
/**
 * 为定时任务提供上报接口
 */
public interface DpReportJobService {

    Boolean reportData(ReportConfigDataDTO reportConfigDataDTO);
}
@Slf4j
@RequiredArgsConstructor
@Service
public class DpReportJobServiceImpl implements DpReportJobService {

    @Resource
    private DpReportServiceFactory dpReportServiceFactory;

    @Override
    public Boolean reportData(ReportConfigDataDTO reportConfigDataDTO) {
        DpReportDataService dpReportService = dpReportServiceFactory.createService(reportConfigDataDTO.getReportType());
        // 上报数据
        dpReportService.reportData(reportConfigDataDTO);
        return true;
    }
}
public interface DpReportDataService {

    Boolean reportData(ReportConfigDataDTO reportConfigDataDTO);
}
@Service
@Slf4j
public class DpReportDataServiceGovImpl implements DpReportDataService { 
   @Override
    public Boolean reportData(ReportConfigDataDTO dto) { 
		 return true;
	}
}
@Component
@Slf4j
public class ScheduledTaskDpReport {

    @Resource
    private DpReportJobService dpReportJobService;

    @Resource
    private ReportConfigDataList reportConfigList;

    /**
     * 每天凌晨1点执行一次定时任务,推送前一天的数据
     */
    @Scheduled(cron = "0 0 1 * * ? ")
    // @Scheduled(cron = "0 0/5 * * * ? ")
    public ResultBean<Boolean> reportData() {
        for (ReportConfigDataDTO dto : reportConfigList.getReportConfigData()) {
             log.info("定时任务上报数据:{}", JSONUtil.toJsonStr(dto));
            dpReportJobService.reportData(dto);
        }
        log.info("定时任务上报数据结束");
        return ResultBean.ok(true);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实现策略设计模式,可以按照以下步骤进行: 1. 定义一个抽象策略类,包含一个抽象方法,用于封装具体策略类的算法或行为。 ``` public abstract class Strategy { public abstract void doSomething(); } ``` 2. 定义一个具体策略类,继承抽象策略类,实现抽象方法,封装具体的算法或行为。 ``` public class ConcreteStrategyA extends Strategy { public void doSomething() { System.out.println("Execute strategy A."); } } public class ConcreteStrategyB extends Strategy { public void doSomething() { System.out.println("Execute strategy B."); } } ``` 3. 定义一个上下文类,维护一个对抽象策略类的引用,用于调用具体策略类中封装的算法或行为。上下文类还提供了一个设置具体策略类的方法,用于动态切换和调用不同的算法或行为。 ``` public class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void execute() { strategy.doSomething(); } public void setStrategy(Strategy strategy) { this.strategy = strategy; } } ``` 4. 在客户端中创建一个上下文对象,并将一个具体策略对象传递给它。客户端可以通过调用上下文对象的执行方法,动态切换和调用不同的算法或行为。 ``` public class Client { public static void main(String[] args) { Strategy strategyA = new ConcreteStrategyA(); Strategy strategyB = new ConcreteStrategyB(); Context context = new Context(strategyA); context.execute(); context.setStrategy(strategyB); context.execute(); } } ``` 在上面的示例中,客户端首先创建了两个具体策略对象,即`ConcreteStrategyA`和`ConcreteStrategyB`,然后创建了一个上下文对象`context`,并将`ConcreteStrategyA`对象传递给它。客户端通过调用`context`对象的执行方法,执行了`ConcreteStrategyA`对象中封装的算法或行为。接着,客户端使用`setStrategy`方法动态切换了具体策略对象为`ConcreteStrategyB`,再次调用`context`对象的执行方法,执行了`ConcreteStrategyB`对象中封装的算法或行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值