工厂模式+策略模式

UML:

 class:

public interface IDeliveryService {

    /**
     * 创建第三方出货单
     * @param obj 入参
     */
    Object createThirdOrder(Object obj);
}
@Service
@RequiredArgsConstructor
public class DeliveryServiceImpl implements IDeliveryService {

    private final DeliveryStrategyFactory deliveryStrategyFactory;

    @Override
    public Object createThirdOrder(Object obj){
        // 根据type确定出库策略
        IDeliveryStrategy deliveryStrategy = deliveryStrategyFactory.getDeliveryStrategy(DeliveryPlatformEnum.MO_FANG);
        // 创建
        return deliveryStrategy.create((MoFangCreateOrderDTO )deliveryOrderDTO);
    }
}
@Component
public class DeliveryStrategyFactory implements ApplicationContextAware {

    private Map<DeliveryPlatformEnum,IDeliveryStrategy> deliveryStrategyMap = new HashMap<>();

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        Map<String, IDeliveryStrategy> beansOfType = applicationContext.getBeansOfType(IDeliveryStrategy.class);
        beansOfType.values().forEach(e-> deliveryStrategyMap.put(e.getDeliveryPlatformEnum(),e));
    }

    public IDeliveryStrategy getDeliveryStrategy(DeliveryPlatformEnum deliveryPlatformEnum){
        return deliveryStrategyMap.get(deliveryPlatformEnum);
    }
}
@Getter
public enum DeliveryPlatformEnum {
    /**
     * 魔方平台
     */
    MO_FANG(1,"魔方");

    private final Integer code;

    private final String description;

    DeliveryPlatformEnum(Integer code,String description) {
        this.code = code;
        this.description = description;
    }
}
public interface IDeliveryStrategy {
    /**
     * 策略所属平台枚举
     * @return 。
     */
    DeliveryPlatformEnum getDeliveryPlatformEnum();
    /**
     * 创建出货单
     * @param
     * @return
     */
    Object create(Object obj);
}
@Service
@RequiredArgsConstructor
public class MoFangDeliveryStrategy implements IDeliveryStrategy {

    private final MoFangClient moFangClient;

    @Override
    public DeliveryPlatformEnum getDeliveryPlatformEnum() {
        return DeliveryPlatformEnum.MO_FANG;
    }

    @Override
    public Object create(Object obj){
        return JsonUtils.toObject(moFangClient.createOrder((MoFangCreateOrderDTO) obj), MoFangCreateOrderResponse.class);
    }


}

工厂模式策略模式结合可有效实现审批功能,提高代码复用性与可维护性。以下为具体实现方法: ### 定义审批策略接口 先定义一个通用审批接口,此接口包含审批操作的方法。以引用[3]为例,可定义审批接口如下: ```java public interface AuditStrategyService { void approve(String userId, String id); } ``` ### 实现具体审批策略 为不同审批类型(如购买审批、订单审批)实现具体审批策略类,这些类需实现上述审批接口。 ```java // 购买审批策略类 public class PurchaseAuditStrategy implements AuditStrategyService { @Override public void approve(String userId, String id) { // 实现购买审批的具体逻辑 System.out.println("进行购买审批,用户ID: " + userId + ",审批ID: " + id); } } // 订单审批策略类 public class OrderAuditStrategy implements AuditStrategyService { @Override public void approve(String userId, String id) { // 实现订单审批的具体逻辑 System.out.println("进行订单审批,用户ID: " + userId + ",审批ID: " + id); } } ``` ### 创建审批策略工厂 创建一个工厂类,依据不同审批类型创建对应的审批策略对象。 ```java import java.util.HashMap; import java.util.Map; public class AuditStrategyFactory { private static final Map<String, AuditStrategyService> strategyMap = new HashMap<>(); static { strategyMap.put("purchase", new PurchaseAuditStrategy()); strategyMap.put("order", new OrderAuditStrategy()); } public static AuditStrategyService getAuditStrategy(String auditType) { return strategyMap.get(auditType); } } ``` ### 使用工厂和策略进行审批操作 在业务层使用工厂类获取具体审批策略对象,然后执行审批操作。 ```java public class AuditService { public void performAudit(String auditType, String userId, String id) { AuditStrategyService auditStrategy = AuditStrategyFactory.getAuditStrategy(auditType); if (auditStrategy != null) { auditStrategy.approve(userId, id); } else { System.out.println("未找到对应的审批策略,审批类型: " + auditType); } } } ``` ### 调用示例 ```java public class Main { public static void main(String[] args) { AuditService auditService = new AuditService(); // 进行购买审批 auditService.performAudit("purchase", "123", "456"); // 进行订单审批 auditService.performAudit("order", "789", "101"); // 尝试不存在的审批类型 auditService.performAudit("unknown", "111", "222"); } } ``` 通过以上步骤,利用工厂模式策略模式实现了审批功能。不同审批类型的具体逻辑封装在各自策略类中,工厂类负责创建和管理这些策略对象,提高了代码的可维护性和扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值