Singleton-Klasse vs. Klasse mit statischen member
Trotz der vielen threads zu diesem Thema, ich bin immer noch unklar, Wann Sie wählen, welche Ansatz.
Ich bin der Hoffnung, dass durch die Diskussion ein konkretes Beispiel, ich will endlich "get it."
Hinweis: Meine Sprache ist hier Kakao, obwohl die generelle Frage ist nicht Sprach-spezifisch.
Habe ich eine Klasse TaskQueue, dass ich verwenden möchten:
- Zugriff von überall in meinem code, um hinzufügen oder entfernen von geplanten Aufgaben
- Prozess automatisch geplante tasks in regelmäßigen Abständen
Wenn TaskQueue zum ersten mal eingesetzt, ich will TaskQueue zu initiieren, ein thread, der wird dann aufwachen in regelmäßigen Abständen zum Bearbeiten der Aufgaben.
Offensichtlich, ich brauche mindestens zwei Variablen:
- ein array zum speichern der Aufgaben
- eine Instanz der thread-Bearbeitung der Aufgaben
Da ich nur eine Warteschlange von Aufgaben und ein thread für die Bearbeitung dieser Aufgaben, habe ich zwei Möglichkeiten:
-
Machen TaskQueue eine singleton-Klasse (zum Beispiel CWL_DECLARE_SINGLETON_FOR_CLASS_WITH_ACCESSOR wie beschrieben in http://www.cocoawithlove.com/2008/11/singletons-appdelegates-and-top-level.html, was ich glaube, werde ich ändern müssen, um die CWLSynthesizeSingleton.h-Datei aus und starten Sie die Gewinde an den init-Zeit.)
-
Haben die ganze Palette von Aufgaben und die thread-Instanz sowohl statisch (nach der Vorgehensweise, die hier vorgeschlagen: Wie kann ich erklären-Klasse-level-Eigenschaften in Objective-C?)
Ist es eindeutig ein Ansatz, der ist besser als der andere in diesem speziellen Fall? Wenn ja, warum?
- hinters Licht geführt: stackoverflow.com/questions/519520/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die wichtigsten Unterschiede sind die einfachen Dinge wie:
Wenn Sie nicht brauchen, alle von Ihnen, wie bei globalen Funktionen zugegriffen werden muss, die alle um deinen code, dann kann man mit statischen Methoden.
Ich persönlich bevorzuge die Verwendung von statischen Methoden, es sei denn, ich habe ein expliziter Grund für die Verwendung einer singleton-Instanz (wie zum Beispiel mit einer gemeinsamen Schnittstelle, aber unterschiedliche Implementierungen).
Anbetracht der Tatsache, dass refactoring, statische Methoden, um eine singleton-Instanz ist ein ziemlich einfacher Prozess, so dass, wenn Sie jemals die Notwendigkeit für die letztere, die Sie überarbeiten es einfach (dann hast du den C-Präprozessor, ein Einzelzimmer
#define
wäre fast schon genug).object.delegate = instance
erfordert eine echte Instanz eines Objekts. Eine Klasse mit statischen Methoden nicht verwendet werden könnten, in einem solchen Szenario zu erfüllen die Rolle eines Delegierten. Wenn Sie eine callback-Delegaten-Mechanismus implementiert wird dann kann man immer vermeiden die Notwendigkeit von echten Instanzen.