Un lugar este lenguaje se utiliza en gran medida está en XMLBeans. El objetivo de ese proyecto es tomar un Esquema XML y generar un conjunto de clases de Java que puede usar de forma bidireccional para trabajar con documentos XML correspondientes al esquema. Por lo tanto, le permite analizar XML en beans xml o crear beans xml y enviarlos a xml.
En general, la mayoría de los tipos de esquema xml se asignan a una interfaz Java.Esa interfaz tiene en su interior una fábrica que se utiliza para generar instancias de dicha interfaz en la implementación por defecto:
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
}
}
Cuando me encontré por primera vez este parecía mal para unir toda esta porquería aplicación en la definición de interfaz. Sin embargo, en realidad cada vez me gusta más, ya que permite que todo se defina en términos de interfaces, pero tiene una manera uniforme de obtener instancias de la interfaz (en lugar de tener otra clase externa de fábrica/generador).
Lo recogí para las clases donde esto tenía sentido (particularmente aquellas en las que tenía un gran control sobre la interfaz/impls) y me pareció bastante limpio.
Ooh, me gusta la idea. – Herms
@Totophil: me alegro de que hayas tenido la idea y gracias por mejorar mi respuesta. @Herms: ¡me alegro de que te guste! – alexpopescu
Comúnmente el objeto nulo podría ser un singleton también, ya que no se mantiene en ningún estado ni muta ningún otro objeto; esta es en realidad una gran respuesta ya que voy a empezar a hacer cosas como esta a partir de ahora, ¡esto es inteligente! – Esko