Un posto questo idioma è usato pesantemente è in XMLBeans. Lo scopo di tale progetto è di prendere uno schema XML e generare un set di classi Java che è possibile utilizzare in modo bidirezionale per lavorare con i documenti XML corrispondenti allo schema. Quindi, consente di analizzare XML in bean xml o creare i bean xml e di output in xml.
In generale, la maggior parte dei tipi di schemi xml sono mappati su un'interfaccia Java.Quella interfaccia ha al suo interno una fabbrica che viene utilizzato per generare istanze di tale interfaccia nella implementazione di default:
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
}
}
Quando ho incontrato prima questo mi è sembrato sbagliato legare tutto questo gunk implementazione nella definizione dell'interfaccia. Tuttavia, in realtà mi piaceva perché lasciava che tutto fosse definito in termini di interfacce, ma aveva un modo uniforme per ottenere istanze dell'interfaccia (invece di avere un'altra classe factory/builder esterna).
L'ho preso per le classi in cui ciò aveva senso (in particolare quelli in cui avevo un grande controllo sull'interfaccia/impls) e l'ho trovato abbastanza pulito.
fonte
2009-03-01 08:02:53
Ooh, mi piace questa idea. – Herms
@Totophil: felice che tu abbia avuto l'idea e grazie per aver migliorato la mia risposta. @Herms: contento che ti piaccia! – alexpopescu
Comunemente Null Object può anche essere un singleton dato che non mantiene nessuno stato e non muta altri oggetti - questa è in realtà una grande risposta dato che inizierò a fare cose come questa d'ora in avanti, questo è intelligente! – Esko