Я собираюсь создать набор объектов, каждый из которых имеет уникальный идентификатор. Если объект уже существует с этим идентификатором, я хочу использовать существующий объект. В противном случае я хочу создать новый. Я пытаюсь не использовать слово Singleton, потому что я знаю это грязное слово здесь...
Я могу использовать метод factory:
// A map of existing nodes, for getInstance.
private static Map<String, MyClass> directory = new HashMap<String, MyClass>();
public static MyClass getInstance(String name) {
MyClass node = directory.get(name);
if(node == null) {
node == new MyClass(name);
}
return node;
}
Или одинаково, у меня мог бы быть отдельный метод MyClassFactory.
Но я планировал подкласс MyClass:
public class MySubClass extends MyClass;
Если я больше не буду и вызывать MySubClass.getInstance():
MyClass subclassObj = MySubClass.getInstance("new name");
... тогда subclassObj будет простым MyClass, а не MySubClass.
Однако переопределение getInstance() в каждом подклассе кажется взломанным.
Есть ли у меня четкое решение?
Это обобщенная версия вопроса. Более конкретно, поскольку ответчики попросили их.
Программа предназначена для создания ориентированного графика зависимостей между узлами, представляющими части программного обеспечения. Подклассы включают в себя программы Java, веб-службы, хранимые процедуры SQL, триггеры, управляемые сообщениями и т.д.
Таким образом, каждый элемент класса "is-a" в этой сети имеет методы навигации и изменения зависимостей с другими узлами. Разница между подклассами будет заключаться в реализации метода populate()
, который используется для настройки объекта из соответствующего источника.
Скажем, node с именем 'login.java' узнает, что он имеет зависимость от 'checkpasswd.sqlpl':
this.addDependency( NodeFactory.getInstance("checkpasswd.sqlpl"));
Проблема заключается в том, что объект checkpasswd.sqlpl может или не может существовать в настоящее время.