美好的一天,使用枚举作为工厂vs静态工厂方法
我已经提取了我的对象创建到工厂。
在项目中执行此操作的标准方法是使用静态工厂方法。
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
我决定做一个枚举工厂。为什么?不能扩展它,不需要最终的类级别,也不需要私有构造函数。
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
也是Singleton模式的审查。
对我来说有两种实现之间没有区别,我宁愿选择一个是即无需清洁编写额外的访问修饰符
是A枚举的误用下面,因为它仅仅是为了用于常量?
我在实现之前做了一些研究,发现了stackoverflow问题:http://stackoverflow.com/questions/23721115/singleton-pattern-using-enum-version – Rentius2407
@ Rentius2407是的,我们通常使用enum for singleton模式。在你的问题中,你说使用枚举工厂模式,而不是单身模式。工厂模式将为每个工厂方法调用创建不同的objs,因为枚举模式将始终获得相同的obj。 – kissrain