关于工厂设计的实现(实战)

前沿

我也是来学习公司大哥的写法,写的不好大佬们多多指正。

一,设计工厂类 

NwmsInventoryLogTypeEnum

package com.excenon.bean.enums.nwms;

import com.alibaba.fastjson.annotation.JSONType;
import lombok.Getter;

import java.util.Arrays;


@Getter
@JSONType(serializeEnumAsJavaBean = true)
public enum NwmsInventoryLogTypeEnum {

    ENTER_STORAGE( 1, "入库"),
    EXPORT_STORAGE( 2, "出库"),
    TRANSFER( 3, "调拨"),
    ISSUE( 4, "领用"),
    INVALIDATE( 5, "作废");

    private Integer code;

    private String desc;

    NwmsInventoryLogTypeEnum(Integer code, String desc){
        this.code = code;
        this.desc = desc;
    }


    public static String getDescByCode(int code) {
        return Arrays.stream(NwmsInventoryLogTypeEnum.values())
                .filter(e -> e.code == code)
                .map(NwmsInventoryLogTypeEnum::getDesc)
                .findFirst()
                .orElse("");
    }

    public static NwmsInventoryLogTypeEnum getEnumByCode(int code) {
        return Arrays.stream(NwmsInventoryLogTypeEnum.values())
                .filter(e -> e.code == code)
                .findFirst()
                .orElse(null);
    }

    public static Boolean notEnterOrExport(int code) {
        return code == TRANSFER.getCode() || code == ISSUE.getCode() || code == INVALIDATE.getCode();
    }

}

InventoryAbstractInterface  接口

 定义了一个日志检测的方法

package com.excenon.data.community.service.nwms.factory;

import com.excenon.bean.domain.nwms.inventory.NwmsInventoryLogEntity;

public interface InventoryAbstractInterface {

    Boolean logCheck(NwmsInventoryLogEntity logEntity);

}

InitializingBean 接口

org.springframework.beans.factory.InitializingBean 是 Spring 框架中的一个接口,它定义了一个方法 afterPropertiesSet。当一个类实现了该接口并且被 Spring 容器创建时,容器会在初始化过程中自动调用该方法。

afterPropertiesSet 方法的主要作用是用于在对象的属性设置完成后执行一些初始化操作。通常情况下,我们可以在这个方法中进行一些依赖注入的检查、资源的初始化、连接的建立等等。

使用 InitializingBean 接口的好处是,我们可以将初始化逻辑放在一个统一的地方,并与 Spring 容器的生命周期进行关联。这样可以确保在对象被完全创建和设置属性之后,再执行相应的初始化操作,避免在对象尚未准备好的情况下进行操作。

在您提供的代码中,afterPropertiesSet 方法的具体实现是将 NwmsInventoryLogTypeEnum.ISSUE 类型的对象注册到 InventoryFactory 中,可能是为了在系统初始化阶段对该类型对象进行处理或调用。

InventoryAbstractHandler 抽象类

通过使用关键字 abstract 可以定义抽象类。抽象类可以包含抽象方法(用 abstract 关键字修饰的方法),这些方法在抽象类中没有具体的实现,而是由子类来实现。

package com.excenon.data.community.service.nwms.factory;

import org.springframework.beans.factory.InitializingBean;

public abstract class InventoryAbstractHandler implements InventoryAbstractInterface, InitializingBean {
}

 下面是基础抽象类的子类们

 其中一个子类  继承 InventoryAbstractHandler。需要实现上面两个接口的方法

InventoryFactory

  1. public static InventoryAbstractHandler getHandler(NwmsInventoryLogTypeEnum typeEnum) 方法:

    • 这是一个静态方法,可以通过类名直接调用,不需要实例化对象。
    • 它接收一个 NwmsInventoryLogTypeEnum 类型的参数 typeEnum,用于获取相应类型的处理器。
    • 内部通过调用 handler.get(typeEnum) 方法从 handler Map 中获取对应的处理器,并返回该处理器。
  2. public static void register(NwmsInventoryLogTypeEnum typeEnum, InventoryAbstractHandler value) 方法:

    • 这也是一个静态方法。
    • 它接收两个参数,一个是 NwmsInventoryLogTypeEnum 类型的 typeEnum,另一个是 InventoryAbstractHandler 类型的 value
    • 在方法内部,首先判断传入的 typeEnum 和 value 是否为空,如果为空则直接返回。
    • 然后调用 handler.put(typeEnum, value) 方法,将传入的 typeEnum 和 value 存入 handler Map 中。
  3. private final static Map<NwmsInventoryLogTypeEnum, InventoryAbstractHandler> handler = Maps.newHashMap() 成员变量:

    • 这是一个静态的、不可变的 Map 对象 handler,用于存储 NwmsInventoryLogTypeEnum 与 InventoryAbstractHandler 的映射关系。
    • 使用 Maps.newHashMap() 方法创建了一个空的 HashMap 实例作为 handler 的初始值。
@Component
public class InventoryFactory {


    private final static Map<NwmsInventoryLogTypeEnum, InventoryAbstractHandler> handler = Maps.newHashMap();

    public static InventoryAbstractHandler getHandler(NwmsInventoryLogTypeEnum typeEnum) {
        return handler.get(typeEnum);
    }

    public static void register(NwmsInventoryLogTypeEnum typeEnum, InventoryAbstractHandler value){
        if (Objects.isNull(typeEnum) || Objects.isNull(value)) {
            return;
        }
        handler.put(typeEnum, value);
    }

}

实现

通过工厂类获取到特定类型的处理器,并调用该处理器的 logCheck 方法对传入的实体 entity 进行处理
InventoryFactory.getHandler(type).logCheck(entity);
  • 19
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值