【发布时间】:2017-02-16 10:58:49
【问题描述】:
早安,
我已将我的对象创建提取到工厂中。
项目中的标准做法是使用静态工厂方法。
public final class CustomerFactory {
private CustomerFactory(){}
public static Customer valueOf(Detail detail) {
Customer customer = new Customer();
String name = detail.getName();
customer.setName(name);
String lastname = detail.getLastname();
customer.setLastname(lastname);
customer.setFullname(name + " " + lastname);
Date age = detail.getAge();
customer.setAge(age);
return customer;
}
}
通过查看代码,我可以看到构造函数是私有的,而类是最终的。该类不能被实例化或扩展,即new 或extends
我决定做一个同样的枚举工厂。为什么?不能扩展它,类级别不需要final,也不需要私有构造函数。
public enum CustomerFactory {
INSTANCE;
public Customer from(Detail detail) {
Customer customer = new Customer();
String name = detail.getName();
customer.setName(name);
String lastname = detail.getLastname();
customer.setLastname(lastname);
customer.setFullname(name + " " + lastname);
Date age = detail.getAge();
customer.setAge(age);
return customer;
}
}
经过同行的审查,决定应该回到原来的状态,因为它错误地使用了 enum 和单例模式。
对我来说,这两种实现没有区别,我宁愿选择更简洁的一种,即不需要编写额外的访问修饰符
以下是对枚举的误用,因为它仅用于常量吗?
【问题讨论】: