Ein Nachteil von Singletons ist, dass man sie nicht so einfach erweitern kann. Sie müssen im Grunde eine Art von Dekorationsmuster oder etwas Ähnliches, wenn Sie ihr Verhalten ändern wollen. Und wenn Sie eines Tages mehrere Möglichkeiten haben wollen, diese eine Sache zu tun, kann es ziemlich schmerzhaft sein, sie zu ändern, je nachdem, wie Sie Ihren Code gestalten.
Eine Sache, die Sie beachten sollten, wenn Sie Singletons verwenden, versuchen Sie, sie an denjenigen weiterzugeben, der sie benötigt, anstatt sie direkt darauf zugreifen zu lassen... Andernfalls, wenn Sie jemals wählen, um mehrere Möglichkeiten, die Sache, die Singleton tut haben, wird es ziemlich schwierig zu ändern, da jede Klasse eine Abhängigkeit einbettet, wenn es das Singleton direkt zugreift.
Also grundsätzlich:
public MyConstructor(Singleton singleton) {
this.singleton = singleton;
}
statt:
public MyConstructor() {
this.singleton = Singleton.getInstance();
}
Ich glaube, diese Art von Muster wird als Dependency Injection und wird im Allgemeinen als eine gute Sache angesehen.
Aber wie bei jedem Muster... Denken Sie darüber nach und überlegen Sie, ob seine Verwendung in der gegebenen Situation unangemessen ist oder nicht... Regeln sind dazu da, gebrochen zu werden, und Muster sollten nicht unüberlegt und unkontrolliert angewendet werden.