У меня есть две отдельные сущности:Использование FactoryMethod картины
public enum Rule implements Validatable, StringRepresentable{
//...
}
и
public inteface Filter extends Validatable, StringRepresentable{
//...
}
Где
public inteface Validatable{
public GenericValidator getValidator();
}
и
public interface StringRepresentable{
public String getStringRepresentation();
}
GenericValidator
- это абстрактный класс, имеющий ряд подклассов. Я бы не хотел, чтобы пользователи обращались напрямую. Как мне лучше справляться с этими вещами?
Я не понимаю, когда это лучше создать класс как
public class ValidatorFactory{
public Validator getRuleValidator(Rule r){ ... }
public Validator getFilterValidator(Filter f){ ... }
}
вместо реализации интерфейса Validatable
как я показано ранее.
Не может кто-нибудь объяснить, как я могу принять правильное решение? Какие потенциальные обстоятельства требуют применения FactoryMethod
плохого решения, и когда это будет действительно хорошо?
UPD:
public interface Validator{
public ErrorCode validate();
}
public abstract class GenericValidator implements Validator{
//...
}
ErrorCode
класс инкапсулирует результат проверки (null
если valiadtion как будет завершен succsfully).
Если у вас есть такие проблемы, как подклассы 'GenericValidator', использование' ValidatorFactory' должно работать для вас, так как вам просто нужен соответствующий валидатор для вашей службы, верно? Кроме того, когда вы говорите: «Я бы не хотел, чтобы пользователи имели доступ напрямую», как вы это понимаете? – ha9u63ar
@ ha9u63ar На самом деле, да. Мне просто нужен валидатор для службы. И у меня есть dillema: создание фабрики или реализация интерфейса. –
@ ha9u63ar__how вы имеете в виду? Я имею в виду, что конечный пользователь должен знать только о классе GenericFactory и его методе 'validate()', который будет переопределен в подклассах. Вот почему я думаю об инкапсуляции подклассов и их создании. –