Код выглядит хорошо. В реальной реализации не следует объявлять фабричный метод для выброса каких-либо исключений, связанных с отражением. И у вас, вероятно, все равно будет какой-то другой код для создания документа.
Метод faxtory должен принимать Class<? extends Document>
в качестве параметра, чтобы никто не мог попросить его создать, например, String
.
[обновление:] Пример кода:
public Document createDocument(Class<? extends Document> clazz) {
try {
return clazz.newInstance();
} catch (InstantiationException e) {
throw new IllegalArgumentException(e);
}
}