Одно из мест, где интенсивно используется эта идиома, - XMLBeans . Цель этого проекта - взять схему XML и сгенерировать набор классов Java, которые можно использовать в двух направлениях для работы с документами XML, соответствующими этой схеме. Таким образом, он позволяет вам анализировать XML на XML-компоненты или создавать XML-компоненты и выводить их в XML.
Как правило, большинство типов схем xml сопоставляются с интерфейсом Java. Этот интерфейс имеет внутри себя фабрику, которая используется для генерации экземпляров этого интерфейса в реализации по умолчанию:
public interface Foo extends XmlObject {
public boolean getBar();
public boolean isSetBar();
public void setBar(boolean bar);
public static final SchemaType type = ...
public static final class Factory {
public static Foo newInstance() {
return (Foo)XmlBeans.getContextTypeLoader().newInstance(Foo.type, null);
}
// other factory and parsing methods
}
}
Когда я впервые столкнулся с этим, казалось неправильным связывать весь этот ганк реализации с определением интерфейса. Тем не менее, мне на самом деле это понравилось, поскольку оно позволяло определять все в терминах интерфейсов, но иметь единый способ получения экземпляров интерфейса (в отличие от наличия другого внешнего класса фабрики / сборщика).
Я подобрал его для классов, где это имело смысл (особенно для тех, где я имел большой контроль над интерфейсом / имплами), и нашел его довольно чистым.