2009-02-26 6 views
0

Ich möchte eine Bibliothek verwenden, die Singletons stark verwendet, aber ich brauche tatsächlich einige der Manager-Klassen, mehrere Instanzen zu haben. Der Code ist Open Source, aber das Ändern des Codes selbst würde das Aktualisieren der Lib auf eine neuere Version erschweren.Kann ich ein Singleton entschlüsseln

Welche Tricks gibt es, wenn überhaupt, um die Erstellung einer neuen Instanz eines Singletons oder sogar der gesamten Bibliothek zu erzwingen?

Antwort

1

Die Antwort ist "es kommt darauf an". Ein gutes Beispiel ist der von Microsofts C Runtime verwendete C++ - Heap. Dies ist natürlich als Singleton implementiert. Wenn Sie nun die CRT statisch mit mehreren DLLs verknüpfen, erhalten Sie mehrere Kopien. Die neueren Implementierungen haben einen einzelnen Heap, während die älteren CRTs einen Heap pro Bibliothek erstellt haben.

2

Unter Windows können Sie jede Instanz in verschiedenen DLLs einkapseln.

+0

Könnte oder kann nicht helfen, siehe mein Gegenbeispiel. – MSalters

1

Denken Sie daran, dass die Bibliothek auch von der Singleton-Natur des Singleton abhängt. Wenn Sie die Bibliothek aktualisieren möchten, müssen Sie sicherstellen, dass Ihre Änderungen nicht gegen die Funktion der Bibliothek verstoßen. Dies kann nur jedes Mal manuell durchgeführt werden.

3

Finden Sie heraus, wer die Bibliothek in erster Linie geschrieben hat, besuchen Sie ihre Hausadresse und schlagen Sie sie zu einem blutigen Pulp, vorzugsweise mit einem Buch über Software-Design. :)

Abgesehen davon: Pflegen Sie Ihre Änderungen an der ursprünglichen Bibliothek als Patch-Set, so dass Sie es (mehr oder weniger) einfach auf jede neue Version anwenden können. Versuchen Sie außerdem, Ihre Änderungen in die Bibliothek zu übertragen, damit Sie die Patches nicht selbst pflegen müssen. ;)

Verwandte Themen