Dies ist ein weiteres Entwurfsmuster in einem älteren Code, über das ich bei Google nicht viel finden konnte. In diesem Fall erweitert eine Kindklasse ihre abstrakte Elternklasse, dreht sich dann aber um und deklariert eine statische Instanz der Elternklasse:
public abstract class MessageBase {
protected DAOFactory factory;
// method declarations
}
public class EDWMessage extends MessageBase {
private static MessageBase instance;
public static MessageBase getInstance(Properties properties) {
if (instance == null) {
instance = new EDWMessageTransaction(properties, null);
}
return instance;
}
//more code
}
Ich bin mir nicht sicher, ob ich verstehe, was der Grund für dieses Entwurfsmuster ist (falls es ein bekanntes Muster ist). Ist dies eine Art Bequemlichkeitsmuster, um zu vermeiden, dass jede Mitgliedsvariable der Elternklasse als statisch deklariert wird? Oder ist es dafür gedacht, dass mehrere Kinderklassen jeweils eine Instanz der Elternklasse haben können. Aber wenn das der Fall ist, warum dann die übermäßige Verwendung von Vererbung anstelle von einfacher Komposition?
Der Rest des Codes gibt keinen Hinweis darauf, warum dies auf diese Weise geschehen sollte. Jeder Gedanke oder jede Idee wäre mir sehr willkommen. Danke!
P.S. Ich scheine auf eine Menge interessanter Leute zu treffen. Entwurf Muster in diesem alten Code, mit dem ich nicht umzugehen weiß. Vielen Dank an alle, die mir bereits geholfen haben.
Edit: Erweiterung des Codebeispiels. Werde wieder editieren, wenn ich irgendwo entdecke, dass dieser Code tatsächlich verwendet wird. Juhu für keine Dokumentation.