Добрый день,Использование перечисления как заводского и статического заводского метода
Я извлек создание своего объекта на заводе.
Стандартный способ сделать это в проекте - использовать статический заводский метод.
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
Я решил сделать фабрику enum, которая делает то же самое. Зачем? Нельзя расширять его, нет необходимости в финале на уровне класса и не нужно иметь частный конструктор.
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
, а также одноплодной шаблон.
Для меня нет никакой разницы между этими двумя реализациями, я предпочел бы выбрать тот, который чище т.е. нет необходимости кодировать дополнительные модификаторы
доступа ниже злоупотребления в перечислении, как он предназначен только для использоваться для констант?
Я сделал несколько исследований перед реализацией, нашел вопрос о стеке: http://stackoverflow.com/questions/23721115/singleton-pattern-using-enum-version – Rentius2407
@ Rentius2407 Да, мы обычно используем перечисление для singleton шаблон. В вашем вопросе вы сказали, используя enum для заводского шаблона, а не singleton pattern. Заводская модель создаст различные объекты с каждым вызовом метода фабрики, поскольку шаблон перечисления всегда будет иметь тот же объект. – kissrain