Ein Ort, dieses Idiom stark in XMLBeans ist, verwendet wird. Der Zweck dieses Projekts besteht darin, ein XML-Schema zu erstellen und eine Reihe von Java-Klassen zu generieren, die Sie bidirektional verwenden können, um mit XML-Dokumenten zu arbeiten, die dem Schema entsprechen. So können Sie XML in XML-Beans analysieren oder die XML-Beans erstellen und an XML ausgeben.
Im Allgemeinen sind die meisten XML-Schematypen einer Java-Schnittstelle zugeordnet.Diese Schnittstelle hat in sich eine Fabrik, die verwendet wird Instanzen dieser Schnittstelle in der Standardimplementierung zu generieren:
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
}
}
Als ich das erste begegnet es schien falsch all diese Implementierung klebrige Masse in die Schnittstellendefinition zu binden. Wie auch immer, ich habe es wirklich gemocht, da es alles in Bezug auf Schnittstellen definiert hat, aber eine einheitliche Möglichkeit hat, Instanzen der Schnittstelle zu erhalten (im Gegensatz zu einer anderen externen Fabrik-/Erstellerklasse).
Ich nahm es für Klassen, wo dies Sinn machte (vor allem diejenigen, wo ich eine große Kontrolle über die Schnittstelle/impls hatte) und fand es ziemlich sauber.
Ooh, Ich mag diese Idee. – Herms
@Totophil: froh, dass Sie die Idee und den Dank für die Verbesserung meiner Antwort bekommen haben. @herms: froh, dass es Ihnen gefällt! – alexpopescu
Allgemein Null-Objekt könnte auch ein Singleton sein, da es keinen Zustand hält oder irgendwelche anderen Objekte mutiert - das ist eigentlich eine großartige Antwort, da ich von nun an anfangen werde, Dinge wie diese zu tun, das ist schlau! – Esko