加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用Enum或String作为静态工厂方法?

发布时间:2020-12-15 08:44:12 所属栏目:Java 来源:网络整理
导读:使用enum或String调度到正确的对象以在静态工厂方法中创建是否更好? 字符串示例: public static Car createCar(String carName){ if(carName.equals("Ferrari")){ return new Ferrari(); } else if(carName.equals("Porsche")){ return new Porsche(); } .
使用enum或String调度到正确的对象以在静态工厂方法中创建是否更好?

字符串示例:

public static Car createCar(String carName){
    if(carName.equals("Ferrari")){
        return new Ferrari();
    }
    else if(carName.equals("Porsche")){
        return new Porsche();
    }
    ....
}

枚举示例:

public static Car createCar(CarEnum carEnum){
    if(CarEnum.FERRARI.equals(carEnum)){
        return new Ferrari();
    }
    else if(CarEnum.PORSCHE.equals(carEnum)){
        return new Porsche();
    }
    ....
}

就目前而言,据我说:

使用枚举的好处:

>避免用户使用未经处理的carName调用工厂.

使用Enum的缺点:

增加依赖性,因为更改为枚举(例如,FERRARI变为ENZO_FERRARI)将需要在客户端上进行修改.但是,使用String,我们可以将法拉利重定向到Enzo Ferrari实例,而无需重新编译客户端代码.当然,我们可以为客户端使用旧的枚举值和FERRARI重定向到ENZO-FERRARI枚举做同样的事情,但对我而言,它意味着枚举必须保留旧值以使客户端兼容……对我来说没有意义.

我想知道你对这个问题有什么看法?

解决方法

如果像在这种情况下那样,对方法有一定数量的可接受参数,那么最好在方法的客户端上尽可能地强制执行该约束.在这种情况下,接受任何旧字符串将导致比使用枚举更多的失败.

但是,在这种有限的情况下,您可能还会考虑为每种类型的汽车使用命名工厂方法:如createFerrari(),createPorsche()等.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读