栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 策略模式的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 策略模式的使用

java 策略模式的使用
  • 一、为什么要用到策略模式
  • 二、代码实现

一、为什么要用到策略模式 二、代码实现

1.接口类

public interface CreateOrderService {

    
    CreateOrderDto createOrder(CreateOrderVm createOrderVm);

}

2.多个接口实现类

@Service
public class CreateAdvanceOrderImpl implements CreateOrderService {

    @Override
    public CreateOrderDto createOrder(CreateOrderVm createOrderVm) {
        System.out.println("创建先行订单");
        return null;
    }
}
@Service
public class CreateReserveOrderImpl implements CreateOrderService {
    @Override
    public CreateOrderDto createOrder(CreateOrderVm createOrderVm) {
        System.out.println("创建预定订单");
        return null;
    }
}
@Service
public class CreateOrderImpl implements CreateOrderService {
    @Override
    public CreateOrderDto createOrder(CreateOrderVm createOrderVm) {
        System.out.println("创建现货订单");
        return null;
    }
}

3.枚举类

public enum CreateOrderStrategyEnum {

    先行(0, "com.gemo.bear.service.order.impl.CreateAdvanceOrderImpl"),
    定金预定(3, "com.gemo.bear.service.order.impl.CreateReserveOrderImpl"),
    现货(6, "com.gemo.bear.service.order.impl.CreateOrderImpl");

    private Integer openStart; //状态
    private String objectPath;//类的完全限定名:包名+类名

    CreateOrderStrategyEnum(Integer openStart, String objectPath) {
        this.openStart = openStart;
        this.objectPath = objectPath;
    }

    public static String getCreateOrderObject(Integer openStart) {
        for (CreateOrderStrategyEnum value : CreateOrderStrategyEnum.values()) {
            if (openStart == value.openStart) {
                return value.objectPath;
            }
        }
        return null;
    }
}

4.策略类

public class CreateOrderStrategy {

    private CreateOrderService createOrderService;

    
    public CreateOrderStrategy(CreateOrderService createOrderService) {
        this.createOrderService = createOrderService;
    }

    
    public CreateOrderDto createOrder(CreateOrderVm createOrderVm) {
        return this.createOrderService.createOrder(createOrderVm);
    }
}

5.策略类的使用

    @ApiOperation("订单创建")
    @PostMapping("create-order-test")
    public ResponseBuild createOrderTest(@Validated @RequestBody CreateOrderVm createOrderVm)  {
        try {
            //类的完全限定名:包名+类名
            String object = CreateOrderStrategyEnum.getCreateOrderObject(createOrderVm.getOpenState());
            //调用无参构造器创建实例
            CreateOrderService createOrderService = (CreateOrderService) Class.forName(object).newInstance();
            CreateOrderStrategy createOrderStrategy = new CreateOrderStrategy(createOrderService);
            return ResponseBuild.success(createOrderStrategy.createOrder(createOrderVm));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/424443.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号